如何添加标题到Scrapy CrawlSpider请求?

z9ju0rcb  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(117)

我正在使用CrawlSpider类来抓取一个网站,我想修改每个请求中发送的标头。具体来说,我想在请求中添加引用。
针对此问题,我检查了

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

在我的响应解析函数和Referer头是不存在的。我认为这意味着引用没有被提交的请求(除非网站不返回它,我不确定)。
我还不知道如何修改请求的头。同样,我的spider是从CrawlSpider派生的。覆盖CrawlSpider的_requests_to_follow或为规则指定process_request回调将不起作用,因为这些时候引用不在范围内。
有人知道如何动态修改请求头吗?

xuo3flqw

xuo3flqw1#

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

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

RefererMiddleware也会这样做,自动从以前的响应中获取引用URL。

tnkciper

tnkciper2#

您必须启用SpiderMiddleware,它将填充referer以获得响应。请参阅scrapy.contrib.spidermiddleware.referer.RefererMiddleware的文档
简而言之,您需要将此中间件添加到项目的设置文件中。

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

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

相关问题