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

Cat*_*oes 7 python scrapy

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

根据这个问题,我查了一下

response.request.headers.get('Referer', None)
Run Code Online (Sandbox Code Playgroud)

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

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

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

war*_*iuc 20

您可以使用参数REFERER手动传递给每个请求headers:

yield Request(parse=..., headers={'referer':...})
Run Code Online (Sandbox Code Playgroud)

RefererMiddleware 会这样做,自动从前一个响应中获取引用URL.


Cat*_*oes 12

我不想回答我自己的问题,但我发现了如何做到这一点.您必须启用SpiderMiddleware,它将填充referer以获取响应.查看文档scrapy.contrib.spidermiddleware.referer.RefererMiddleware

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

SPIDER_MIDDLEWARES = {
'scrapy.contrib.spidermiddleware.referer.RefererMiddleware': True,
}
Run Code Online (Sandbox Code Playgroud)

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

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