一日一技:谁说 Scrapy 不能爬 HTTP/2?

举报
未闻Code 发表于 2022/01/28 11:33:30 2022/01/28
【摘要】 Scrapy 也能直接爬 HTTP/2

之前有一位爬虫大佬写了一篇文章,说 HTTP/2协议天然就能防大部分的爬虫。Python 无论是 requests 还是 Scrapy 都不支持 HTTP/2协议。

Go + HTTP/2[1]这个网站可以检测你是否使用 HTTP/2协议进行请求。当我们直接使用浏览器访问的时候,页面长这样:

32.png

注意红框中的文字。但如果我们直接使用 Scrapy 访问这个页面,并打印源代码,返回的 HTML 长这样:

33.png

注意红框中的文字,这样看起来,似乎Scrapy 确实不支持HTTP/2协议?

但我为什么总是一直强调要读官方文档,不要去搜索一些垃圾博客呢。因为官方文档里面,已经明确告诉你Scrapy 不仅原生支持 HTTP/2,而且只需要改一个配置就可以了:Settings — Scrapy 2.5.0 documentation[2]

34.png

更换下载器句柄就可以了

请大家注意上图中标红色方框的地方。根据它的描述,我只需要在settings.py文件中,更新下载器句柄(handlers)就可以了。我们来测试一下。把下面这段代码直接复制到 Scrapy 爬虫中:

DOWNLOAD_HANDLERS = {
    'https': 'scrapy.core.downloader.handlers.http2.H2DownloadHandler',
}

35.png

改好以后,重新运行爬虫,打印出来的源代码如下图所示:

可以看到,不需要安装任何额外的库。Scrapy 原生就支持 HTTP/2了。

参考文献

[1] Go + HTTP/2: https://http2.golang.org/

[2] Settings — Scrapy 2.5.0 documentation: https://docs.scrapy.org/en/latest/topics/settings.html#download-handlers-base

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。