我正在使用CrawlSpider类来抓取一个网站,我想修改每个请求中发送的标头。具体来说,我想在请求中添加引用。
针对此问题,我检查了
response.request.headers.get('Referer', None)
在我的响应解析函数和Referer
头是不存在的。我认为这意味着引用没有被提交的请求(除非网站不返回它,我不确定)。
我还不知道如何修改请求的头。同样,我的spider是从CrawlSpider派生的。覆盖CrawlSpider的_requests_to_follow
或为规则指定process_request
回调将不起作用,因为这些时候引用不在范围内。
有人知道如何动态修改请求头吗?
2条答案
按热度按时间xuo3flqw1#
您可以使用
headers
参数手动将REFERER
传递给每个请求:RefererMiddleware也会这样做,自动从以前的响应中获取引用URL。
tnkciper2#
您必须启用
SpiderMiddleware
,它将填充referer
以获得响应。请参阅scrapy.contrib.spidermiddleware.referer.RefererMiddleware
的文档简而言之,您需要将此中间件添加到项目的设置文件中。
然后,在响应解析方法中,可以使用
response.request.headers.get('Referrer', None)
来获取referer。