Scrapy:如何打印请求引用



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

10倍

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

接收http Referer标头作为响应会非常奇怪。

但当谈到scrapy时,在响应的request字段中,有一个对Request对象的引用,在该对象上生成了Response,因此下一个调用结果:

response.request.headers.get('Referer', None)

如果在发出请求时设置了Referer标头,则可以包含该标头。

上面的问题是很久以前提出的,现在已经得到了很好的回答。

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

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

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

如果你在parser_B中无法获得文章列表(列表页)的url(referer-url),你可以在parser_A中设置headers字段,然后将其发送到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'))

希望这能帮助那些需要帮助的人。

最新更新