scrapy大致流程

mac2022-06-30  7

1.items文件执行 2.主文件执行初始化(start_urls,allowed_domains) 3.middlewares文件执行初始化,初始化包括先执行from_crawler 函数再执行init函数 4.pipelines文件执行初始化 5.Pipelines 执行open_spider函数 6.middlewares文件执行spider_opened函数 7.middlewares文件的DownloaderMiddleware类按优先数从低到高逐步执行process_request函数(DownloaderMiddleware的优先数可以自己在settings文件设置),返回值为None时执行下一小的优先数的process_request函数;返回值为response时转第八步;返回值为request时停止其他事件的执行把请求放入请求队列 8.middlewares文件的DownloaderMiddleware类按优先数从高到低逐步执行process_response函数,返回值为request时停止其他事件的执行把请求放入请求队列;返回值为response时执行下一大的优先数的process_response函数 9.执行主文件的parse函数 10.pipelines文件的Pipeline类按优先数从低到高逐步执行process_item函数,主文件需yield item类的实例,process_item函数再处理item对象 11.处理下一请求,回到第七步,parse函数也可以yield request对象加入请求队列 12.处理完所有请求执行Pipeline类的close_spider函数

request对象为scrapy.Request()常用参数url,callback,headers callback的值代表返回response后调用的函数,dont_filter代表是否不过滤重复请求 response对象为scrapy.http.[HtmlRsponse|TextResponse|XmlResponse]()常用参数url,body,status,encoding

parse函数对response参数的提取用response.[css|xpath]() css参数 ‘div .x #y a::attr(href)’ 代表查找所有div下的所有class属性为x的所有id属性为y的所有a标签的属性href,再调用extract()方法返回列表,extract_first()返回第一个值 ‘div a::text’ 代表查找所有div下的所有a标签的属性文本值,再调用extract()方法返回列表,extract_first()返回第一个值 xpath参数’//div[@class=”x”]/a/@href’ 代表查找所有div且class属性为x下一子节点a标签的属性href,再调用extract()方法返回列表,extract_first()返回第一个值 ‘//div[@class=”x”]//a/text()’ 代表查找所有div且class属性为x下所有a标签的文本,再调用extract()方法返回列表,extract_first()返回第一个值

yield self.engine.open_spider(self.spider, start_requests) builtins.TypeError: name must be an instance of str 将settings文件里设置的变量名小写的都改为大写,使用的地方也要更改即可不报错

最新回复(0)