是否可以从解析函数中的响应对象获取请求引用者?
10倍
答案 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种不同的解析器方法:
如果您进入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'))
希望这对需要帮助的人有所帮助。