如何在Scrapy CrawlSpider请求中添加标题?

时间:2013-01-08 16:58:45

标签: python scrapy

我正在使用CrawlSpider类来抓取网站,我想修改每个请求中发送的标头。具体来说,我想将引用添加到请求中。

根据this question,我检查了

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

在我的响应解析函数中,Referer标头不存在。我认为这意味着请求中没有提交Referer(除非网站没有返回它,我不确定)。

我还没有弄清楚如何修改请求的标头。我的蜘蛛再次来自CrawlSpider。覆盖CrawlSpider的_requests_to_follow或指定规则的process_request回调将无效,因为在这些时候引用不在范围内。

有谁知道如何动态修改请求标头?

2 个答案:

答案 0 :(得分:18)

您可以使用REFERER参数手动将headers传递给每个request

yield Request(parse=..., headers={'referer':...})

RefererMiddleware does the same,自动从之前的回复中获取引荐来源网址。

答案 1 :(得分:11)

我不想回答我自己的问题,但我发现了如何做到这一点。您必须启用SpiderMiddleware,它将填充referer以获取响应。请参阅scrapy.contrib.spidermiddleware.referer.RefererMiddleware的{​​{3}}

简而言之,您需要将此中间件添加到项目的设置文件中。

SPIDER_MIDDLEWARES = {
'scrapy.contrib.spidermiddleware.referer.RefererMiddleware': True,
}

然后在您的响应解析方法中,您可以使用response.request.headers.get('Referrer', None)来获取引用。

如果您立即了解这些中间件,请再次阅读它们,休息一下,然后再次阅读它们。我发现它们非常令人困惑。