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

要实现高效的爬虫,大家能给点建议不?

  •  
  •   andrewrong · 2014-12-22 19:15:39 +08:00 · 5051 次点击
    这是一个创建于 3624 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近公司要实现一个高性能的爬虫,用来爬取淘宝的商品信息,数量比较大,时间上也有要求;

    我们公司现在有一个爬虫,是用PHP实现的,全部都是手写的,没有用什么框架,通过代理IP单进程来实现爬取页面;从上面的需求我们的想法是通过起多个进程来实现并发爬取淘宝页面;但是针对那么大的量我们必须充分利用我们的代理IP,但是又不能被淘宝封;

    针对上面的这些描述,我想问我现在遇到的一些问题:

    1. 如何高效的利用我们的代理IP(不是很多),又不被淘宝封(这个希望能比较详细点)?
    2. 我们现在这套PHP架构是否合适做这个爬虫,如果不适合,能不能建议一下?
    3. 我在网上看到有人提出应该有一个反监控系统用来检测对方的反爬的变化,并且做出相应的调整,有人做过这个东西吗?

    最后,谢谢大家啦...
    23 条回复    2014-12-25 11:09:35 +08:00
    mringg
        1
    mringg  
       2014-12-22 19:23:46 +08:00 via Android   ❤️ 1
    你得监控下,看看你们的瓶颈在哪里,然后才能考虑怎么优化
    andrewrong
        2
    andrewrong  
    OP
       2014-12-22 19:27:46 +08:00   ❤️ 1
    @mringg 目前我们测试发现爬取一个商品基本上要花3s,如果代理IP比较好的话就比较快;3s基本算是一个平均值;最后爬取的页面通过正则把要的内容取出然后存入数据库;现在是单进程所以代理IP还没充分的利用起来;
    haker
        3
    haker  
       2014-12-22 19:29:09 +08:00
    拨号换IP呀!
    andrewrong
        4
    andrewrong  
    OP
       2014-12-22 19:31:07 +08:00
    @haker 是公司,用拨号换IP可行吗?我在google的时候也有人提出,我不是很理解这个概念,是不是重新拨号IP就会换这个意思?
    haker
        5
    haker  
       2014-12-22 19:31:14 +08:00
    看错了,你的是php的。
    写客户端,拨号换ip,开50-100线程,没日没夜的爬
    GeekGao
        6
    GeekGao  
       2014-12-22 19:31:17 +08:00
    高效 可由不得你,电商网站都有反爬虫机制,你速度快起来了也够呛能提高爬取效率。
    使用PHP的话也可以搞个多进程的爬虫,语言并不是什么太大问题。关键是你爬虫的调度策略。
    andrewrong
        7
    andrewrong  
    OP
       2014-12-22 19:33:01 +08:00
    @GeekGao 你说的爬虫调度策略具体指什么?
    haker
        8
    haker  
       2014-12-22 19:33:20 +08:00
    @andrewrong 重新拨号就会换ip,去电信申请多进程,可以各地政策不一样,我们这里可以申请到2个进程,就是一个猫同一个账号,两台机器可以同时进行拨号。
    GeekGao
        9
    GeekGao  
       2014-12-22 19:38:15 +08:00
    @andrewrong
    什么时间爬什么内容什么时候暂停什么时候再开始
    andrewrong
        10
    andrewrong  
    OP
       2014-12-22 19:50:17 +08:00
    @GeekGao 这个就要看taobao店的反爬机制来定了...哎...好纠结哇...
    yakczh
        11
    yakczh  
       2014-12-22 20:17:11 +08:00
    随机间隔时间爬
    tftk
        12
    tftk  
       2014-12-22 22:06:03 +08:00
    3s有点慢。
    xunyu
        13
    xunyu  
       2014-12-22 22:22:32 +08:00
    task做好,多任务分布式,单机循环肯定不行的,可以试试rabbitmq
    nowgoo
        14
    nowgoo  
       2014-12-22 23:20:06 +08:00
    购买阿里云最低配VPS。
    ETiV
        15
    ETiV  
       2014-12-22 23:46:00 +08:00
    PHP 不知道有没有TCP连接的复用...可以检查一下, 要是每次爬完都close 了socket, 那应该用更底层的方式去做, 能快一些吧
    binux
        16
    binux  
       2014-12-22 23:55:00 +08:00   ❤️ 1
    1. 如何高效的利用我们的代理IP(不是很多),又不被淘宝封(这个希望能比较详细点)?
    想让马跑又不让马吃草。。唯一的办法就是挖掘每个IP的抓取极限,看看多大的速度不会被封。另外一种办法就是找更多的代理。

    2. 我们现在这套PHP架构是否合适做这个爬虫,如果不适合,能不能建议一下?
    取决于瓶颈在被封,还是处理速度。如果你没有足够的IP,无法提高速度,语言或者架构是无法为你带来提升的。反之,瓶颈不再是怕被封的话。使用异步抓取,多进程解析能进一步提高性能。而 PHP 这么好的语言,我不知道行不行。

    3. 我在网上看到有人提出应该有一个反监控系统用来检测对方的反爬的变化,并且做出相应的调整,有人做过这个东西吗?
    这东西还是靠更多经验,你就抓一个淘宝,而且没有那么多IP资源让你折腾的话,手动搞一个流量限制就好了。由于抓取延迟长达3秒,细的特征实际上一点用都没有。就是 UA+cookie+每分钟流量控制就完了。


    最后广告一下: https://github.com/binux/pyspider 异步,带流量控制,多进程带 WEBUI 的爬虫
    esile
        17
    esile  
       2014-12-23 02:18:48 +08:00
    @binux pyspider+1
    sohoer
        18
    sohoer  
       2014-12-23 08:45:59 +08:00
    淘宝商品数量级使用代理怕是不靠普
    多线ADSL+自动重拔(有偿提供方案)
    andrewrong
        19
    andrewrong  
    OP
       2014-12-23 09:20:26 +08:00
    @binux 谢谢binux那么详细的回答,给了我那么多的建议;我会去思考你说的这些的方面的...其实代理IP可以申请,但是我也要最大化每一个代理IP的利用率...
    crazycookie
        20
    crazycookie  
       2014-12-23 12:46:07 +08:00
    scrapy 记得打开cookies,还是不错的... 多ip的策略人工打码啊
    benjiam
        21
    benjiam  
       2014-12-23 20:15:38 +08:00 via Android
    难度在对方对你的屏蔽
    andrewrong
        22
    andrewrong  
    OP
       2014-12-23 22:25:35 +08:00
    @benjiam 现在考虑的最多的也就是这个问题....
    fewspider
        23
    fewspider  
       2014-12-25 11:09:35 +08:00 via Android
    Python beautifulSoup + gevent并发路过
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1822 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:31 · PVG 00:31 · LAX 08:31 · JFK 11:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.