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 也会重新下载。)
制做爬虫:
1,新建项目(scrapy startproject 项目名)
2,明确目标(编写items.py)明确你想要抓取的目标
3,制作爬虫(scrapy genspider 名称 网址)
4,存储内容(pipelines.py)设计管道存储爬去内容
建立爬虫之后要在setting里面设置一些参数
ROBOTSTXT_OBEY = False 这样设置,因为scrapy是默认遵守爬虫协议的,所以我们要把它设置为false
LOG_FILE='tencent.log'#日志文件
LOG_ENABLED=True#默认启用日志
LOG_ENCODING='UTF-8'#日志编码
LOG_LEVEL='DEBUG'#日志等级 ERROR/WARNING/INFO/DEBUG
还有存储 的时候需要打开
ITEM_PIPELINES = {
'DaZhong.pipelines.DazhongPipeline': 300,#这个是你对应爬虫 名字是跟你的爬虫名字对应
}
都设置完之后 可以现在 爬虫文件parse函数里面写下这些代码
with open('dazhong.html','w',encoding='utf-8')as fp:
fp.write(response.body.decode('utf-8'))
然后运行项目 看会不会有保存的html文件