我是新来的Python和刮胡。我以前没有使用回调函数。不过,我现在要做的是下面的代码。将执行第一个请求,并将其响应发送到定义为第二个参数的回调函数:
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
行是否在parse_page2
中的response.meta
行之前执行?parse_page2
返回的item
要去哪里?parse_page1
中,return request
语句的需要是什么?我想提取的物品需要从这里归还。
parse_page1
中简单地返回它,并避免额外的http请求调用在scrapy: understanding how do items and requests work between callbacks中 ,埃尔鲁尔的回答很好。
我要添加项转换的部分。首先,我们应该清楚回调函数只有在这个请求的响应dwonload之前才能工作。
在scrapy.doc给出的代码中,它没有声明page1和的url和请求。让我们将page1的url设置为“http://www.example.com.html”。
[parse_page1]是
[parse_page2]是
下载page1的响应时,调用parse_page1生成page2的请求:
下载page2的响应后,调用parse_page2重新运行一个项目:
阅读docs:
答案:
蜘蛛由破旧的引擎管理。它首先从
start_urls
中指定的url发出请求,并将它们传递给下载程序。下载完成时调用请求中指定的回调。如果回调返回另一个请求,则重复相同的操作。如果回调返回一个Item
,则该项将被传递到一个管道以保存已刮除的数据。如文档中所述,每个回调(都是
parse_page1
和parse_page2
)可以返回Request
或Item
(或其中一个iterable)。parse_page1
返回的是Request
,而不是Item
,因为需要从其他URL中删除其他信息。第二个回调parse_page2
返回一个项,因为所有的信息都被删除并准备传递给一个管道。相关问题 更多 >
编程相关推荐