Python 爬虫从入门到进阶之路(十六)

之前的文章我们介绍了几种可以爬取网站信息的模块,并根据这些模块爬取了《糗事百科》的糗百内容,本章我们来看一下用于专门爬取网站信息的框架 Scrapy。

Scrapy是用纯Python实现一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。Scrapy 使用了 Twisted['twɪstɪd](其主要对手是Tornado)异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。

Scrapy架构图

Python 爬虫从入门到进阶之路(十六)

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

Scrapy框架官方网址:

Scrapy中文维护站点:

我们可以通过  pip install scrapy 进行 scrapy 框架的下载安装。

接下来我们就来创建一个简单的爬虫目录并对其中的目录结构进行说明。

首先我们进入我们的工作目录,然后在终端运行  scrapy startproject qiushi ,这样我们就创建了一个叫 qiushi 的基于 scrapy 框架构建的爬虫项目,目录结构如下:

Python 爬虫从入门到进阶之路(十六)

下面来简单介绍一下各个主要文件的作用:

scrapy.cfg :项目的配置文件

qiushi/ :项目的Python模块,将会从这里引用代码

qiushi/items.py :项目的目标文件

qiushi/middlewares/ :项目的中间件

qiushi/pipelines.py :项目的管道文件

qiushi/settings.py :项目的设置文件

对于目录中的 __init__.py 文件,是一个空文件,我们可以不去管理,但是也不能删除,否则项目将无法运行。

items.py 使我们要写代码逻辑的文件,相关的爬取代码在这里面写。

middlewares.py 是一个中间件文件,可以将一些自写的中间件在这里面写。

pipelines.py 是一个管道文件,我们爬取信息的处理可以在这里面写。

settings.py 是一个设置文件,里面是我们爬取信息的一些相关信息,我们可以根据需要对其进行球盖,当然也可以按照里面给定的默认设置。

接下来我们就来爬取一下之前我们爬取过的糗百的内容。

我们要爬取的网站是 https://www.qiushibaike.com/text/page/1/ 。

Python 爬虫从入门到进阶之路(十六)

我们通过 Xpath Helper 的谷歌插件经过分析获取到我们想要的内容为: //div[contains(@id,"qiushi_tag")] 

Python 爬虫从入门到进阶之路(十六)

我们要爬取的是发布糗百的 作者,头像和糗事内容。

我们打开 items.py,然后将其改为如下代码:

1 import scrapy 2 3 class QiushiItem(scrapy.Item): 4 # define the fields for your item here like: 5 name = scrapy.Field() # 作者 6 imgUrl = scrapy.Field() # 头像 7 content = scrapy.Field() # 内容

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdjpy.html