19

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

10倍

4

2 回答 2

42

HTTPReferer字段由 HTTP 客户端在请求标头中设置,而不是在响应标头中设置,因为此标头告诉服务器客户端从哪里到当前页面。

Referer收到 http标头作为响应会很奇怪。

但是当谈到 时,在响应的字段中有一个对生成 的对象scrapy的引用,所以下一个调用结果:RequestResponserequest

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

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

于 2012-08-21T12:40:45.200 回答
3

上面的问题很久以前就问过了,已经很好回答了。

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

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

  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'))

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

于 2018-10-11T08:45:42.300 回答