V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
maxhhg
V2EX  ›  程序员

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

  •  
  •   maxhhg · 2021-01-21 17:58:46 +08:00 · 2266 次点击
    这是一个创建于 1434 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    4.对比 2 与 3 。
    murmur
        5
    murmur  
       2021-01-21 18:09:35 +08:00
    如果你要是能有高效的反扒机制,单线程也可以做的很快
    Orenoid
        6
    Orenoid  
       2021-01-21 18:16:25 +08:00
    JS 是单线程的,浏览器不是。
    单线程也可以很快,Python 里的协程,基于 IO 多路复用,可以并发地进行大量网络请求,快到你需要手动限制频率,防止被屏蔽。
    wh1012023498
        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
    yuzo555
        8
    yuzo555  
       2021-01-21 20:59:41 +08:00
    因为瓶颈不是机器性能,而是地球太大了
    linw1995
        9
    linw1995  
       2021-01-22 09:55:28 +08:00
    单线程可以快的,multiplex
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3025 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:28 · PVG 22:28 · LAX 06:28 · JFK 09:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.