Scrapy:如何打印请求引用者

时间:2012-08-21 12:34:59

标签: python scrapy

是否可以从解析函数中的响应对象获取请求引用者?

10倍

2 个答案:

答案 0 :(得分:35)

HTTP Referer字段由HTTP客户端在请求标头中设置,不在响应标头中,因为此标头告知服务器客户端来自当前页面的位置。

在响应中收到http Referer标题会很奇怪。

但在谈到scrapy时,会在响应的Request字段中引用生成Response的{​​{1}}对象,因此下一个调用结果为:< / p>

request
如果在提出请求时设置了<{1>},则

可以包含response.request.headers.get('Referer', None) 标头。

答案 1 :(得分:1)

以上问题很久以前就被问到了,并得到很好的回答。

但是,我想我会添加一个不同的答案,以防Rostyslav Dzinko的答案不适用于您的情况。

假设您有2种不同的解析器方法:

  1. 一个解析器(我们称它为parser_A)只是解析列表的 文章(列表页面)以提取链接信息和其他信息。
  2. 另一个解析器(我们称之为parser_B)从目标文章(文章页面)中提取文章信息。

如果您进入parser_B后仍无法获取文章列表(列表页面)的url(引用URL),则可以在parser_A中设置标头字段,然后将其发送到parser_B,如下例所示:

yield scrapy.Request(url=article_page_url, callback=self.parser_B, dont_filter=True, headers={'referer_url': list_page_url})

然后,在parser_B方法中,您可以执行以下操作以获得列表页面的url:

print(response.request.headers.get('referer_url'))

希望这对需要帮助的人有所帮助。