不懂就问:单线程的爬虫为什么很慢?

2021-01-21 17:58:46 +08:00
 maxhhg

我的网络很快,打开浏览器的网页也很快,但是我采用单线程的爬虫却很慢,究竟是因为什么原因?浏览器与爬虫访问网页有什么不同?(已经百度,网上有很多解释,但各种解释都很不明确)

2262 次点击
所在节点    程序员
9 条回复
Aliencn
2021-01-21 18:03:26 +08:00
浏览器可不是单线程的,浏览器还支持 http2 的推送。
zeroDev
2021-01-21 18:05:31 +08:00
因为网络访问慢,你觉得快,是因为你不会一次性像爬虫一样开多个网页访问数据
多线程爬虫是为了拿到大量数据存在的,比如一个页面 1s,爬虫要 1000 个页面,那就是 1000s,近 20 分分钟,如果你开多线程(比如 5 个吧,那就只有 4 分钟咯。
当然,如果只是几个页面,那就无所谓了,单线程就单线程
czfy
2021-01-21 18:05:51 +08:00
这和你爬什么类型的网页有关吧...

例如是翻页类的,总共 100 页,单线程就只能从 1 一直翻到 100 页
多线程,例如两个线程吧,那就能线程 1 负责 1-50 页,线程 2 负责 51-100 页(只是简化解释)
laminux29
2021-01-21 18:06:16 +08:00
1.先思考一下爬虫的本质是什么。

2.爬一个 100M 的内容,记录下每个元素的爬取时间。

3.把这 100M 的内容,放在本地,写个程序对它进行复制,同时记录下每个文件的复制时间.

4.对比 2 与 3 。
murmur
2021-01-21 18:09:35 +08:00
如果你要是能有高效的反扒机制,单线程也可以做的很快
Orenoid
2021-01-21 18:16:25 +08:00
JS 是单线程的,浏览器不是。
单线程也可以很快,Python 里的协程,基于 IO 多路复用,可以并发地进行大量网络请求,快到你需要手动限制频率,防止被屏蔽。
wh1012023498
2021-01-21 18:45:32 +08:00
浏览器 vs 单线程爬虫
------------------------
浏览器:多个线程同时请求,线程有限制数量,可配置
单线程爬虫:确确实实单线程

结果:浏览器对单线程快


单线程爬虫为什么慢
------------------------
假设场景:你需要爬取 100 个页面
1 个页面耗时:100ms
100 个页面耗时:100ms * 100 = 10s

根源:大量时间花费在 io 等待上


如何提升爬虫速度
-------------------------
1. 多线程 (内核态)
2. 协程(用户态)


爬虫对于 ssr 与 csr 网站的区别
--------------------------------
1.对于 csr 可以考虑使用 puppeteer
yuzo555
2021-01-21 20:59:41 +08:00
因为瓶颈不是机器性能,而是地球太大了
linw1995
2021-01-22 09:55:28 +08:00
单线程可以快的,multiplex

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/747141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX