基于Scrapy架构的网络爬虫入坑第一战——爬取数据然后存入json文件

谈到爬虫,必出利器Scrapy。若是说以前的爬虫借助于我的知识的野蛮生长,那么Scrapy的诞生无疑下降了万众爬虫的门槛。数据库

什么是Scrapy?一言以蔽之:它是一个基于Python语言开发的网络数据抓取的框架,任何人均可以根据需求方便的修改。Scrapy由下面几个部分组成json

(上图来源于网络,侵删)cookie

spiders:爬虫的主模块,主要内容包括网页的解析和内容的结构化网络

items:定义咱们须要的结构化数据,使用方法相似于字典dict框架

pipelines:管道模块,处理spider模块分析好的结构化数据,如存入数据库或者jason文件scrapy

setting:设置,对整个爬虫过程当中的相关参数进行设置,如头文件head,cookie等。ide

middlewares:中间件(暂时不用修改)spa

下面,以网上比较常见的58同城网上的租房信息为例,介绍Scrapy爬取数据的基本过程。日志

 

一、新建Scrapy项目中间件

Windows系统下,先利用Win+R进入cmd界面,然后进入想要建立项目的目录。然后输入下面的命令:

scrapy startproject zufang58

二、Scrapy项目文件

生成的项目结构如图所示:Scrapy项目文件

1spiders:爬虫的主模块

      2items:须要的结构化数据

import scrapy

class Zufang58Item(scrapy.Item):
    #
标题
    title = scrapy.Field()
    # 房间
    room = scrapy.Field()
    # 区域
    zone = scrapy.Field()
    # 地址
    address = scrapy.Field()
    # 价格
    money = scrapy.Field()
    #类型(几室几厅)
    type = scrapy.Field()

3pipelines:管道模块(暂时不须要修改)

class Zufang58Pipeline(object):
    def process_item(self, item, spider):

        return item

4setting:设置(主要设置ROBOTSTXT_OBEY = False)

#在某些状况下咱们想要获取的内容偏偏是被robots.txt所禁止访问的。因此,咱们就将此配置项设置为False,拒绝遵照Robot协议!

ROBOTSTXT_OBEY = False #不遵照开始运行

三、开始运行

运行方式有两种:

1cmd窗口下输入

scrapy crawl zufang58

 

2)在scrapy.cfg创建一个主文件main.py

from scrapy.cmdline import execute

if __name__ == "__main__":
            execute("scrapy crawl zufang58".split())

四、修改piplines存储到json文件

历经千辛万苦,把数据爬下来了,总感受只经过Console窗口看看不过瘾,为此,咱们决定将其存入json文件。

那问题来了,什么是json文件呢?

json文件格式实质是一种dict字典类型,存储的数据描述了一个实物的相关信息。例如能够存入一我的的年龄,职务,身高,体重等等,同时能够很方便地经过文本文件查看。

为此须要修改piplines文件,将结构化的items传出到json文件中。

import json

import logging
class Zufang58Pipeline(object):
    def __init__(self):
        self.file = open('zufang58.json', mode='w', encoding='utf-8')            
 

    def process_item(self, item, spider):
        jsondata = json.dumps(dict(item), ensure_ascii=False) + "\n"
        self.file.write(jsondata)
        except Exception as error:

            # 出现错误时打印错误日志
            logging.error(error)
        return item       
    def close_spider(self, spider):
        self.file.close()
小结

五、小结

最终生成的json文件如图所示:

总的来讲,借助Scrapy框架,大大提升了爬虫的效率,激发了看见什么爬什么的决心。

 

国庆感言:

 

闲着就是无聊,动起来就有活力!

                                                                                                                    ——后记