我正在使用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),来获取引用.
如果您立即了解这些中间件,请再次阅读它们,休息一下,然后再次阅读它们.我发现它们非常令人困惑.
| 归档时间: |
|
| 查看次数: |
19287 次 |
| 最近记录: |