一日一技:谁说 Scrapy 不能爬 HTTP/2?
【摘要】 Scrapy 也能直接爬 HTTP/2
之前有一位爬虫大佬写了一篇文章,说 HTTP/2协议天然就能防大部分的爬虫。Python 无论是 requests 还是 Scrapy 都不支持 HTTP/2协议。
Go + HTTP/2[1]这个网站可以检测你是否使用 HTTP/2协议进行请求。当我们直接使用浏览器访问的时候,页面长这样:
注意红框中的文字。但如果我们直接使用 Scrapy 访问这个页面,并打印源代码,返回的 HTML 长这样:
注意红框中的文字,这样看起来,似乎Scrapy 确实不支持HTTP/2协议?
但我为什么总是一直强调要读官方文档,不要去搜索一些垃圾博客呢。因为官方文档里面,已经明确告诉你Scrapy 不仅原生支持 HTTP/2,而且只需要改一个配置就可以了:Settings — Scrapy 2.5.0 documentation[2]。
更换下载器句柄就可以了
请大家注意上图中标红色方框的地方。根据它的描述,我只需要在settings.py
文件中,更新下载器句柄(handlers)就可以了。我们来测试一下。把下面这段代码直接复制到 Scrapy 爬虫中:
DOWNLOAD_HANDLERS = {
'https': 'scrapy.core.downloader.handlers.http2.H2DownloadHandler',
}
改好以后,重新运行爬虫,打印出来的源代码如下图所示:
可以看到,不需要安装任何额外的库。Scrapy 原生就支持 HTTP/2了。
参考文献
[2] Settings — Scrapy 2.5.0 documentation: https://docs.scrapy.org/en/latest/topics/settings.html#download-handlers-base
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)