V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
swYang
V2EX  ›  编程

怎么能加快爬虫抓取速度

  •  
  •   swYang · 2016-11-20 10:14:24 +08:00 · 4830 次点击
    这是一个创建于 2712 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近迷上看小说,写了一个小说爬虫( PS:也不能算爬虫,只是能简单的执行抓小说列表、详情、入库的操作),想问一下,假定有 1 万部小说,每部 500 章节,为了不给目标服务器造成太大压力,如何能尽快抓完,目前我写的一分钟抓 3 个页面,那么 500*10000/3/60/24 约等于 1100 多天,哦, my god ,大伙儿有啥好建议

    17 条回复    2016-11-22 08:18:55 +08:00
    zwl2012
        1
    zwl2012  
       2016-11-20 10:27:27 +08:00 via iPhone
    上代理池 并行抓取
    wangdashuai
        2
    wangdashuai  
       2016-11-20 10:44:52 +08:00
    要不开多线程,要不上 python 的异步库.爬虫主要瓶颈在 io.
    ifishman
        3
    ifishman  
       2016-11-20 11:04:16 +08:00 via Android
    楼上的没看内容么?楼主说的前提是不给目标服务器施加太大压力的情况下,如何加快抓取速度
    andyfan
        4
    andyfan  
       2016-11-20 11:09:55 +08:00 via Android
    不给服务器造成压力可以夜间爬,避开服务器访问高峰,一分钟爬 3 个页面太慢了
    yidinghe
        5
    yidinghe  
       2016-11-20 11:13:29 +08:00 via Android
    文本内容爬起来为什么这么慢?
    MrJing1992
        6
    MrJing1992  
       2016-11-20 11:22:10 +08:00
    @yidinghe 因为楼主为了不给别人服务器造成压力,同时也是避免被屏蔽,所有一分钟就爬 3 个页面。
    如果不想给别人造成压力,只能避开高峰期了。你可以试试看,当你频率到什么程度时,会被封掉,大概就探到对方的承受力了,也许你现在太低估别人服务器了。
    swYang
        7
    swYang  
    OP
       2016-11-20 11:42:17 +08:00
    @ifishman 其实还是主要怕抓太快,被封,话说对服务器请求过大,会不会被发现,目标站长有查看日志异常一说吗
    swYang
        8
    swYang  
    OP
       2016-11-20 11:43:29 +08:00
    @MrJing1992 看来是我太保守了,我调整一下,多大请求频率试试看.thanks
    herozhang
        9
    herozhang  
       2016-11-20 11:45:43 +08:00
    写一份邮件给对方网站,提出数据需求,愿意有偿购买这批数据,请他们帮忙从数据库给你导出一份数据。
    同时告诉他们,如果他们不这么做,那么你就会开代理池去抓,结果都是一样的。
    suliuyes
        10
    suliuyes  
       2016-11-20 11:46:57 +08:00
    每个服务器是有自己的反爬措施的。你可以自己找个 IP 来试探下(不要用自己的 IP )。最好上代理池,不过免费好用的不好找。其他同学可以推荐下。
    Powered
        11
    Powered  
       2016-11-20 13:18:32 +08:00 via iPhone
    爬虫的瓶颈在 IO ,在数据库的写入,也就是吞吐量…就算你单位时间下载的页面多,也会有速度限制
    swYang
        12
    swYang  
    OP
       2016-11-21 09:18:55 +08:00
    昨天试了试,加大了请求频次,真的可以哦,看来是我低估了目标网站的承受能力,反而是我自己的小电脑开 N 个进程有点吃力,干不了别的了,不过据我实测,一天抓 10 万页面是可以的。
    swYang
        13
    swYang  
    OP
       2016-11-21 09:20:56 +08:00
    突然想到另外一个提高抓取频次的方法是,可以抓另外的网站啊,每家都同时抓,也是一个提高的方法啊
    dcsite
        14
    dcsite  
       2016-11-21 09:59:03 +08:00
    分布式抓取,上限是目标服务器 QPS 极限。
    最好,提醒一下他们服务器压力过大要升级配置~
    tumbzzc
        15
    tumbzzc  
       2016-11-21 19:54:29 +08:00
    为了不给对方服务器造成压力,我决定以最快速度完成抓取,开启了多线程,上代理池,每秒钟抓 40 个页面。。爬了一天一夜,用了 35 个小时,终于爬完了。
    swYang
        16
    swYang  
    OP
       2016-11-22 08:18:14 +08:00 via iPhone
    @tumbzzc 每秒 40 ,我的天
    swYang
        17
    swYang  
    OP
       2016-11-22 08:18:55 +08:00 via iPhone
    @tumbzzc 爬了多少数据
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3039 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:32 · PVG 08:32 · LAX 17:32 · JFK 20:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.