1.Scrapy框架介绍
Scrapy是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,其架构清晰,榄块之间的榈合程度低,可扩展性极强,可以灵活完成各种需求。
-
Engine:引擎,处理整个系统的数据流处理、触发事务,是整个框架的核心。
-
Item:项目,它定义了爬取结果的数据结构,爬取的数据会被赋值成该Item对象。
-
Scheduler:调度器,接受引擎发过来的请求并将其加入队列中, 在引擎再次请求的时候将请求提供给引擎。
-
Downloader:下载器,下载网页内容,并将网页内容返回给蜘蛛。
-
Spiders:蜘蛛,其内定义了爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提取结果和新的请求。
-
Item Pipeline:项目管道,负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据。
-
Downloader Middlewares:下载器中间件,位于引擎和下载器之间的钩子框架,主要处理引擎与下载器之间的请求及响应。
-
Spider Middlewares:蜘蛛中间件,位于引擎和蜘蛛之间的钩子框架,主要处理蜘蛛输入的响应和输出的结果及新的请求。
Scrapy中的数据流由引擎控制,数据流的过程如下:
-
Engine首先打开一个网站,找到处理该网站的Spider,并向该Spider请求第一个要爬取的URL。
-
Engine从Spider中获取到第一个要爬取的URL,并通过Scheduler以Request 的形式调度。
-
Engine向Scheduler请求下一个要爬取的URL。
-
Scheduler返回下一个要爬取的URL给Engine, Engine将URL通过DownloaderMiddJewares转发给Downloader下载。
-
一旦页面下载完毕,Downloader生成该页面的Response,并将其通过DownloaderMiddlewares发送给Engine。
-
Engine从下载器中接收到l Response,并将其通过SpiderMiddlewares发送给Spider处理。
-
Spider处理Response,并返回爬取到的Item及新的Request给Engine。
-
Engine将Spider返回的Item给ItemPipeline,将新的Request给Scheduler。
-
重复第 2 步到第 8 步,直到Scheduler中没有更多的Request, Engine关闭该网站,爬取结束。
Scrapy运作流程:
-
引擎:Hi!Spider, 你要处理哪一个网站?
-
Spider:老大要我处理xxxx.com。
-
引擎:你把第一个需要处理的URL给我吧。
-
Spider:给你,第一个URL是xxxxxxx.com。
-
引擎:Hi!调度器,我这有request请求你帮我排序入队一下。
-
调度器:好的,正在处理你等一下。
-
引擎:Hi!调度器,把你处理好的request请求给我。
-
调度器:给你,这是我处理好的request
-
引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求
-
下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)
-
引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def parse()这个函数处理的)
-
Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。
-
引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。
-
管道``调度器:好的,现在就做!
-
注意!只有当调度器中不存在任何request了,整个程序才会停止,(也就是说,对于下载失败的URL,Scrapy也会重新下载。)
Scrapy爬虫共需要4步:
-
新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
-
明确目标 (编写items.py):明确你想要抓取的目标
-
制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
-
存储内容 (pipelines.py):设计管道存储爬取内容
2.Scrapy框架安装
a. pip3 install wheel
b. 下载twisted http:
/
/
www.lfd.uci.edu
/
~gohlke
/
pythonlibs
/
#twisted
c. 进入下载目录,执行 pip3 install Twisted‑
17.1
.
0
‑cp35‑cp35m‑win_amd64.whl
d. pip3 install pywin32
e.
pip3 install scrapy
3.Scrapy框架基础使用
1)创建项目
创建命令:scrapy startproject 项目名称
项目结构:
project_name/
scrapy.cfg:
project_name/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
scrapy.cfg 项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中)
items.py 设置数据存储模板,用于结构化数据,如:Django的Model
pipelines 数据持久化处理
settings.py 配置文件,如:递归的层数、并发数,延迟下载等
spiders 爬虫目录,如:创建文件,编写爬虫解析规则