【问题标题】:Scrapy:How to print request referrerScrapy:如何打印请求推荐人
【发布时间】:2012-08-21 12:34:58
【问题描述】:

是否可以在解析函数中从响应对象中获取request referrer?

10 倍

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 你是对的,但我想也许 scrapy 也会将此信息存储在响应中。
    • 10x,我会用这个。你在哪里读到的?它是否将引用者作为字符串返回?
    • @user1537701,标头可以是字符串(用于单值标头)或字符串列表(用于多值标头),关于 response.request,据我所知,它应该记录在响应类文档。
    • @user1537701,如果有帮助,请将此问题标记为已回答,以便其他人也能获得帮助。
    • 在将 'Referrer' 替换为 'Referer' 后它实际上可以工作 - 你能更新答案吗?
    【解决方案2】:

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

    但是,我想我会添加一个不同的答案,以防 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'))
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多