我的网络很快,打开浏览器的网页也很快,但是我采用单线程的爬虫却很慢,究竟是因为什么原因?浏览器与爬虫访问网页有什么不同?(已经百度,网上有很多解释,但各种解释都很不明确)
1
Aliencn 2021-01-21 18:03:26 +08:00
浏览器可不是单线程的,浏览器还支持 http2 的推送。
|
2
zeroDev 2021-01-21 18:05:31 +08:00 via Android
因为网络访问慢,你觉得快,是因为你不会一次性像爬虫一样开多个网页访问数据
多线程爬虫是为了拿到大量数据存在的,比如一个页面 1s,爬虫要 1000 个页面,那就是 1000s,近 20 分分钟,如果你开多线程(比如 5 个吧,那就只有 4 分钟咯。 当然,如果只是几个页面,那就无所谓了,单线程就单线程 |
3
czfy 2021-01-21 18:05:51 +08:00
这和你爬什么类型的网页有关吧...
例如是翻页类的,总共 100 页,单线程就只能从 1 一直翻到 100 页 多线程,例如两个线程吧,那就能线程 1 负责 1-50 页,线程 2 负责 51-100 页(只是简化解释) |
4
laminux29 2021-01-21 18:06:16 +08:00
1.先思考一下爬虫的本质是什么。
2.爬一个 100M 的内容,记录下每个元素的爬取时间。 3.把这 100M 的内容,放在本地,写个程序对它进行复制,同时记录下每个文件的复制时间. 4.对比 2 与 3 。 |
5
murmur 2021-01-21 18:09:35 +08:00
如果你要是能有高效的反扒机制,单线程也可以做的很快
|
6
Orenoid 2021-01-21 18:16:25 +08:00
JS 是单线程的,浏览器不是。
单线程也可以很快,Python 里的协程,基于 IO 多路复用,可以并发地进行大量网络请求,快到你需要手动限制频率,防止被屏蔽。 |
7
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 |
8
yuzo555 2021-01-21 20:59:41 +08:00
因为瓶颈不是机器性能,而是地球太大了
|
9
linw1995 2021-01-22 09:55:28 +08:00
单线程可以快的,multiplex
|