我正在使用CrawlSpider类来爬网网站,并且我想修改每个请求中发送的标头。具体来说,我想将引荐添加到请求中。
根据这个问题,我检查了
response.request.headers.get('Referer', None)
在我的响应解析函数中,并且Referer标题不存在。我认为这意味着没有在请求中提交引荐来源网址(除非网站未返回请求,我不确定)。
Referer
我一直无法弄清楚如何修改请求的标头。同样,我的蜘蛛是从CrawlSpider派生的。覆盖CrawlSpider的值_requests_to_follow或process_request为规则指定回调将不起作用,因为此时引用者不在范围内。
_requests_to_follow
process_request
有人知道如何动态修改请求标头吗?
可以使用参数REFERER手动传递给每个请求headers:
headers
yield Request(parse=..., headers={'referer':...})
RefererMiddleware 做同样的事情,自动从先前的响应中获取引用网址。
简而言之,你需要将此中间件添加到项目的设置文件中。
SPIDER_MIDDLEWARES = { 'scrapy.contrib.spidermiddleware.referer.RefererMiddleware': True, }
然后,在响应解析方法中,可以使用response.request.headers.get('Referrer', None)来获取引用。
response.request.headers.get('Referrer', None)