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

谈到爬虫,必出利器Scrapy。如果说之前的爬虫借助于个人知识的野蛮生长,那么Scrapy的诞生无疑降低了万众爬虫的门槛。

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

基于Scrapy架构的网络爬虫入坑第一战——爬取数据而后存入json文件_第1张图片

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

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

items:定义我们需要的结构化数据,使用方法类似于字典dict

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

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

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

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

 

1、新建Scrapy项目

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

scrapy startproject zufang58

2、Scrapy项目文件

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

基于Scrapy架构的网络爬虫入坑第一战——爬取数据而后存入json文件_第2张图片

1spiders:爬虫的主模块

基于Scrapy架构的网络爬虫入坑第一战——爬取数据而后存入json文件_第3张图片

      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 #不遵守开始运行

3、开始运行

运行方式有两种:

1cmd窗口下输入

scrapy crawl zufang58

 

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

from scrapy.cmdline import execute

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

4、修改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()
小结

5、小结

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

基于Scrapy架构的网络爬虫入坑第一战——爬取数据而后存入json文件_第4张图片

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

 

国庆感言:

 

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

                                                                                                                    ——后记

 

 

 

你可能感兴趣的:(爬)