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

开发 前端
说 HTTP/2协议天然就能防大部分的爬虫。Python 无论是 requests 还是 Scrapy 都不支持 HTTP/2协议。

 [[427097]]

之前有一位爬虫大佬写了一篇文章,说 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 爬虫中:

  1. DOWNLOAD_HANDLERS = { 
  2.     'https''scrapy.core.downloader.handlers.http2.H2DownloadHandler'

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

可以看到,不需要安装任何额外的库。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

责任编辑:武晓燕 来源: 未闻Code
相关推荐

2021-06-08 21:36:24

PyCharm爬虫Scrapy

2021-09-26 05:01:55

Scrapy项目爬虫

2021-10-15 21:08:31

PandasExcel对象

2021-04-27 22:15:02

Selenium浏览器爬虫

2021-04-12 21:19:01

PythonMakefile项目

2023-10-28 12:14:35

爬虫JavaScriptObject

2021-04-05 14:47:55

Python多线程事件监控

2021-09-13 20:38:47

Python链式调用

2024-07-30 08:11:16

2021-04-19 23:29:44

MakefilemacOSLinux

2024-07-30 08:16:18

Python代码工具

2022-06-28 09:31:44

LinuxmacOS系统

2022-03-12 20:38:14

网页Python测试

2021-03-12 21:19:15

Python链式调用

2021-07-27 21:32:57

Python 延迟调用

2021-05-08 19:33:51

移除字符零宽

2024-05-24 09:07:06

JSONprint字符串

2024-07-19 18:23:17

2024-11-11 00:38:13

Mypy静态类型

2020-12-11 06:30:00

工具分组DataFrame
点赞
收藏

51CTO技术栈公众号