推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
pc10201
V2EX  ›  Python

如何采集大众点评网的千万数据?它有严格的反爬虫措施

  •  
  •   pc10201 · Jan 3, 2014 · 48199 views
    This topic created in 4688 days ago, the information mentioned may be changed or developed.
    没事研究采集,准备拿大众点评网练手
    形式如下
    http://www.dianping.com/shop/6000000/
    http://www.dianping.com/shop/6000001/

    shop后面的ID是连续的,范围是1-1500万,当然有许多店铺是不存在的(404错误),实际的店铺数量在700万左右,这里是用的穷举法,当然也可以进入网页按深度索引

    遇到一个很严重的问题,就是点评网被爱帮网采集后采取了严格的反爬虫措施。
    严格到什么程序,如果一个IP一秒一个进行采集,大概采集500-1000个左右就会出现403错误,IP被冻结了,一段时间后才解封,如果冻结了你不死心,继续大量采,就永久冻结了。

    有人可能会说,用代理啊,我测试了淘宝许多家的好多代理,库存号称3000-5000个代理IP,一秒钟内能连接上也就200-800个,还有部分是透明代理。
    如果用代理IP,从哪找那么多高质量的代理IP啊?
    55 replies  •  2016-09-18 15:42:23 +08:00
    robinshi2010
    robinshi2010
    Jan 3, 2014
    1
    顶一下。这个问题也好奇。坐等明白人回复。
    jtacm
    jtacm
    Jan 3, 2014❤️1
    2
    有一个思路,反编译大众点评的andriod客户端,看andriod客户端用什么协议去读取数据的,模仿之。
    Mr2
    Mr2
    Jan 3, 2014
    3
    @jtacm 客户端不是一个IP也没有短时间访问大量商店页面吧
    pirex
    pirex
    Jan 3, 2014
    4
    你可以先采集IP地址来练手
    Ever
    Ever
    Jan 3, 2014❤️2
    5
    去应聘dianping DBA.
    kchum
    kchum
    Jan 3, 2014
    6
    @Ever 好方法,哈哈。
    est
    est
    Jan 3, 2014❤️1
    7
    @Ever
    @kchum

    去应聘dianping机房网管可能更快。
    wtl
    wtl
    Jan 3, 2014
    8
    每次被封之后 断开adsl 重新拨号
    46fo
    46fo
    Jan 3, 2014
    9
    @jtacm 抓包就可以了吧 还反编译?
    Lelouchcr
    Lelouchcr
    Jan 3, 2014❤️1
    10
    试试看用goagent来做代理~
    goagent每次发出的请求的地址是不确定的
    noahzh
    noahzh
    Jan 3, 2014
    11
    用一个可以自动切换ip 的路由,大年见过大神用一台笔记本加自动切换ip的路由,用erlang写的程序把大众点评数据全都跑下来了,大众点评还内部开会讨论这个问题了....
    chens
    chens
    Jan 3, 2014
    12
    可以去抓site:www.dianping.com
    pc10201
    pc10201
    OP
    Jan 3, 2014
    13
    @xdeng 我研究了一下大众点评的anroid客户端,是基于HTTP协议的,但采用了某种特殊的流量压缩技术,用普通的抓包软件查看都是乱码~
    suckli
    suckli
    Jan 3, 2014
    14
    修改ip包头的源地址~
    yushiro
    yushiro
    Jan 3, 2014
    15
    曾经采集过, 1秒1个还是太频繁, 我记得当时是1~5秒随机延迟进行采集的, 不过我采集量不大, 也就采集了10w家店铺。
    allenforrest
    allenforrest
    Jan 3, 2014
    16
    @pc10201 居然不是 https 的?
    arron
    arron
    Jan 3, 2014
    17
    大多数路由器也就一个http请求就可以重连的,然后定时去重连。 一般20秒就重连换ip了。 这样会慢点儿, 我记得两年前这么采了dianping 80万数据的样子, 1~2天时间吧。
    上面看你那几百个代理已经够用了,采集一轮,第二轮又可以使了。 点评又没限制一天你一个ip的采集数量。也可以每次换着ip采集,这样同一ip的采集间隔时间就很长了。
    arron
    arron
    Jan 3, 2014
    18
    另外两三年前,我记得点评的店铺我基本都采集了,估摸着漏掉的加起来也就100万数据。
    Livid
    Livid
    MOD
    PRO
    Jan 3, 2014❤️2
    19
    我真的不明白为什么要研究这方面的技术,你不可能靠采集来的数据做一个比点评更好的网站。
    tokki
    tokki
    Jan 3, 2014
    20
    中国人力很便宜
    crny520
    crny520
    Jan 3, 2014❤️2
    21
    @Livid 这就是中国式嘛,想省工人录数据。而且VC和天使都是看数据量和用户量的,不在意清楚你数据那里来的。
    sivacohan
    sivacohan
    Jan 3, 2014
    22
    @Livid

    我抓过58同城的数据。量比较少,大概几千条。
    需求的产生是一个朋友去找了一份做理财产品的工作,似乎是做外汇的机构。然后他们的Leader让他们找2000个做金融,理财方面的联系人的电话。
    这个数据的意义可能不仅仅是复制一个点评,而是因为点评本身不出售符合某种聚合要求的数据,就导致了这种抓取需求的出现。
    wuyadong
    wuyadong
    Jan 3, 2014
    23
    我们拿到了点评的全网数据,cookie,代理,抓取间隔,注意这些东西,就能抓到了。
    imcj
    imcj
    Jan 3, 2014
    24
    抓到了以后提供一个公开的API给大家读吧。
    binux
    binux
    Jan 3, 2014
    25
    @noahzh 按照楼主一个IP能采集1000条数据,点评一共1500w数据计,路由需要换1.5万次IP。
    wangtao
    wangtao
    Jan 3, 2014
    26
    尽量模拟用户访问,不让点评觉得你是个机器人。。
    YouXia
    YouXia
    Jan 3, 2014 via Android
    27
    @binux 求学长分享下好的思路。THX。
    phyng
    phyng
    Jan 3, 2014
    28
    @pirex 你还别说,前段时间我就是这么干的,当然我说的不是抓大众点评
    likuku
    likuku
    Jan 3, 2014❤️1
    29
    @wangtao 同意的说~ 既然「这就是中国式嘛,想省工人录数据。而且VC和天使都是看数据量和用户量的,不在意清楚你数据那里来的。」 那么自己作机器人程序完全凭空捏造就好了。
    zencoding
    zencoding
    Jan 3, 2014 via Android
    30
    伪造蜘蛛也不行吗?那就上Tor
    pythoner
    pythoner
    Jan 3, 2014
    31
    建议从移动客户端入手。比如iphone/安卓 app,比如网站手机版
    ibolee
    ibolee
    Jan 3, 2014
    32
    不知道你这是个什么情况

    之前采集过百度知道。用了一个专属asdl网线,2M,采集被屏蔽后,重启路由器自动获取新IP

    如此周而复始,周而复始。。。
    yanng
    yanng
    Jan 3, 2014 via iPad❤️1
    33
    感觉点评的立场已经非常明确了,不让采。为什么还去采呢?别作恶。
    dingyaguang117
    dingyaguang117
    Jan 3, 2014
    34
    去年抓过点评美食的几十万POI数据,大概1秒一个,5台服务器一起爬的
    the13matrix
    the13matrix
    Jan 3, 2014
    35
    不建议楼主买代理,那可能是黑客玩剩的,小心背黑锅。
    我有2w只鸡,用i2p控制的,全部开出口代理不难,但速度极慢。5秒一个请求就不错了。
    powerfj
    powerfj
    Jan 3, 2014
    36
    很不解,如果一秒钟一个的话,那对于比较大的公司,代理出口上网的话,点评不就上不了了?
    underone
    underone
    Jan 4, 2014
    37
    点评的开放平台不能满足获取数据的需求吗……
    virushuo
    virushuo
    Jan 4, 2014 via iPad
    38
    @Livid 抓数据通常不会为了复制原站,而是做一些其他用途。比如用来监控上海饭馆新开业数量和倒闭数量什么的,不是很有趣?
    Livid
    Livid
    MOD
    PRO
    Jan 4, 2014
    39
    @virushuo 理解了……谢谢
    bengol
    bengol
    Jan 4, 2014
    40
    难道lz不做压力控制?
    raincious
    raincious
    Jan 4, 2014
    41
    @Livid 很明显这是被504弄怕了。
    colincat
    colincat
    Jan 4, 2014❤️1
    42
    多线程 多机器 随机延迟5-10秒,通过不断变换IP每采集100个换一次IP,不断重复上述过程,采集需要不断的测试。还有很多策略不宜公开,反正逆向思维,如果你做这些网站如何防范,然后做出对应的策略,基本上没有不能采的站。
    吼吼 ~
    我发现我对各家的策略都很熟悉了,常年采集各大互联网网站,基本都被我攻陷了~
    colincat
    colincat
    Jan 4, 2014❤️1
    43
    @Livid 这些数据很有用的,可以做大数据分析,我采这些都是用来做hadoop分析的,要不哪来那么多数据呢。。。
    freewizard
    freewizard
    Jan 4, 2014❤️2
    44
    即使不获得任何商业利益,抓取大众点评网站数据明确违反了他们的许可协议
    http://www.dianping.com/aboutus/zhishichanquan.html
    http://www.dianping.com/aboutus/useragreement
    肯定有民事诉讼的风险

    同时如在中国境内抓取或提供抓取工具也有触犯刑法修正案(七)的可能。
    http://www.gov.cn/flfg/2009-02/28/content_1246438.htm
    zack
    zack
    Jan 4, 2014
    45
    采集数据这件事情本身真没有什么值得练手的,除非是想研究更尖端的爬虫数据。如果是要做一些数据分析的话,采样一些数据就够了,没必要去钻研那些反抓取的策略,那些东西来来回回也不过就是那几个套路,其实没什么乐趣,也不是什么值得好奇的问题,太多人天天在用粗糙的手法做这样的工作了。
    doublleft
    doublleft
    Jan 5, 2014
    46
    @chens 好方法
    oldcai
    oldcai
    PRO
    Jan 6, 2014
    47
    @freewizard “提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。”

    抓取好像不算侵入、非法控制
    freewizard
    freewizard
    Jan 7, 2014❤️1
    48
    @oldcai “采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据”
    oldcai
    oldcai
    PRO
    Jan 7, 2014
    49
    @freewizard 受教。
    lazybios
    lazybios
    Feb 15, 2014
    50
    @pc10201 怎么研究啊 用什么抓apk的包
    pc10201
    pc10201
    OP
    Feb 15, 2014
    51
    keven
    keven
    Mar 23, 2014
    52
    目前貌似只有“云采集”对比较有效,云采集就是利用庞大的云端计算机集群来采集,国内有个八爪鱼采集器,有这种技术,而且还对采集速度有智能调控。
    duyaofei
    duyaofei
    Jan 12, 2015
    53
    @pc10201 楼主,有采集到没,或者有什么解决的思路不
    reall3116
    reall3116
    Jan 15, 2015
    54
    @pc10201 楼主最后有什么好的解决方法么?我一直都在用相关的工具来拿电商的评论,被禁掉真是最仁慈的反爬虫策略了…… 就算是每次请求都延迟或者换IP,当数据量相当大的时候时间成本都是不可想象的
    dgivan
    dgivan
    Sep 18, 2016
    55
    每一,别一天干掉一个站,慢点爬,设置下载延迟
    第二,修改请求头,浏览器
    第三,用高质量代理。企业建议用:阿布云代理等等
    第四,禁止 Cookie
    第五,分布式爬取
    可以用下这个代理: http://www.abuyun.com
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2368 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 174ms · UTC 15:25 · PVG 23:25 · LAX 07:25 · JFK 10:25
    ♥ Do have faith in what you're doing.