我是Python和Scrapy的新手。我以前没有使用过回调函数。但是,我现在为下面的代码做。将执行第一个请求,并将其响应发送到定义为第二个参数的回调函数:
def parse_page1(self, response):
item = MyItem()
item['main_url'] = response.url
request = Request("http://www.example.com/some_page.html",
callback=self.parse_page2)
request.meta['item'] = item
return request
def parse_page2(self, response):
item = response.meta['item']
item['other_url'] = response.url
return item
我无法理解以下内容:
item
人口如何?request.meta
该行之前执行response.meta
的线parse_page2
?item
的parse_page2
去哪儿了?return request
语句需要什么parse_page1
?我认为提取的物品需要从这里退回。阅读文档:
对于蜘蛛,抓取周期经历如下过程:
首先,生成初始请求以爬网第一个URL,然后指定要调用的回调函数,并从这些请求中下载响应。
要执行的第一个请求是通过调用
start_requests()
(默认情况下)Request
为方法中指定的URL生成start_urls
的parse
方法以及作为请求的回调函数的方法而获得的。在回调函数中,您解析响应(网页)并返回
Item
对象,Request
对象或两者的迭代。这些请求还将包含一个回调(可能相同),然后由Scrapy下载,然后由指定的回调处理它们的响应。在回调函数中,通常使用选择器(但是也可以使用BeautifulSoup,lxml或您喜欢的任何机制)来解析页面内容,并使用已解析的数据生成项目。
最后,通常将从蜘蛛返回的项目保存到数据库(在某些项目管道中)或使用Feed导出写入文件。
答案:
'item'
该request.meta
行在response.meta
第in行之前如何执行parse_page2
?
蜘蛛由Scrapy引擎管理。它首先从中指定的URL发出请求,start_urls
然后将其传递给下载器。下载完成后,将调用请求中指定的回调。如果回调返回另一个请求,则重复同样的事情。如果回调返回Item
,则该项目将传递到管道以保存抓取的数据。
退回的物品
parse_page2
去哪儿了?有什么需要
return request
陈述的parse_page1
?我认为提取的物品需要从这里退回吗?
如文档中所述,每个回调(parse_page1
和parse_page2
)都可以返回aRequest
或an Item
(或它们的可迭代)。parse_page1
返回Request
不是Item
,因为需要从其他URL刮除其他信息。第二个回调parse_page2
返回一个项目,因为所有信息都已被抓取并准备好传递到管道。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句