1.主要用到的函数及调用的顺序为:
__init__():初始化爬虫名字,和start_urls列表
start_requests()调用make_requests_from_url():生成request对象交给scrapy下载并返回response
parse():解析response,并返回Item或requests(需指定回调函数)。Item传给Item pipeline持久化,而requests交由scrapy下载,并由指定的回调函数处理,一直循环,直到处理完所有的数据。
dont_filter=True会忽略域组的限制(就是忽略http加入host主机的一部分,域名中没有http)
parse()方法的工作机制
1.因为使用的yield而不是return,parse函数会被当作一个生成器使用,scrapy会逐一获取parse方法中生成的结果,并判断该结果是什么类型
2.如果request则加入爬取队列,如果是item类型则使用pipeline处理,其他类型则返回错误信息
3.scrapy取到第一部分的request不会立马去发送这个request,只是把这个request放到队列里,然后接着从生成器里获取
4.取尽request,再获取第二部分的item,就会放到对应的pipeline处理
5.parse()方法作为回调函数callback赋值给了request,指定parse()方法来处理这些请求scrapy.Request(url,callback=self.parse)
6.Request对象经过调度,执行生成scrapy.http.resonse()的响应对象,并送回给parse()方法,直到调度器中没有Request(递归)
7.取尽之后,parse工作结束,引擎根据队列和pipeline中的内容去执行相应的操作
8.程序在取得各个页面的items前,会先处理完之前所有的request队列里的请求,然后再提取item
9.scrapy引擎和调度器将负责到底