推荐学习书目
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 · 47586 views
    This topic created in 4520 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
        1
    robinshi2010  
       Jan 3, 2014
    顶一下。这个问题也好奇。坐等明白人回复。
    jtacm
        2
    jtacm  
       Jan 3, 2014   ❤️ 1
    有一个思路,反编译大众点评的andriod客户端,看andriod客户端用什么协议去读取数据的,模仿之。
    Mr2
        3
    Mr2  
       Jan 3, 2014
    @jtacm 客户端不是一个IP也没有短时间访问大量商店页面吧
    pirex
        4
    pirex  
       Jan 3, 2014
    你可以先采集IP地址来练手
    Ever
        5
    Ever  
       Jan 3, 2014   ❤️ 2
    去应聘dianping DBA.
    kchum
        6
    kchum  
       Jan 3, 2014
    @Ever 好方法,哈哈。
    est
        7
    est  
       Jan 3, 2014   ❤️ 1
    @Ever
    @kchum

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

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

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

    如此周而复始,周而复始。。。
    yanng
        33
    yanng  
       Jan 3, 2014 via iPad   ❤️ 1
    感觉点评的立场已经非常明确了,不让采。为什么还去采呢?别作恶。
    dingyaguang117
        34
    dingyaguang117  
       Jan 3, 2014
    去年抓过点评美食的几十万POI数据,大概1秒一个,5台服务器一起爬的
    the13matrix
        35
    the13matrix  
       Jan 3, 2014
    不建议楼主买代理,那可能是黑客玩剩的,小心背黑锅。
    我有2w只鸡,用i2p控制的,全部开出口代理不难,但速度极慢。5秒一个请求就不错了。
    powerfj
        36
    powerfj  
       Jan 3, 2014
    很不解,如果一秒钟一个的话,那对于比较大的公司,代理出口上网的话,点评不就上不了了?
    underone
        37
    underone  
       Jan 4, 2014
    点评的开放平台不能满足获取数据的需求吗……
    virushuo
        38
    virushuo  
       Jan 4, 2014 via iPad
    @Livid 抓数据通常不会为了复制原站,而是做一些其他用途。比如用来监控上海饭馆新开业数量和倒闭数量什么的,不是很有趣?
    Livid
        39
    Livid  
    MOD
    PRO
       Jan 4, 2014
    @virushuo 理解了……谢谢
    bengol
        40
    bengol  
       Jan 4, 2014
    难道lz不做压力控制?
    raincious
        41
    raincious  
       Jan 4, 2014
    @Livid 很明显这是被504弄怕了。
    colincat
        42
    colincat  
       Jan 4, 2014   ❤️ 1
    多线程 多机器 随机延迟5-10秒,通过不断变换IP每采集100个换一次IP,不断重复上述过程,采集需要不断的测试。还有很多策略不宜公开,反正逆向思维,如果你做这些网站如何防范,然后做出对应的策略,基本上没有不能采的站。
    吼吼 ~
    我发现我对各家的策略都很熟悉了,常年采集各大互联网网站,基本都被我攻陷了~
    colincat
        43
    colincat  
       Jan 4, 2014   ❤️ 1
    @Livid 这些数据很有用的,可以做大数据分析,我采这些都是用来做hadoop分析的,要不哪来那么多数据呢。。。
    freewizard
        44
    freewizard  
       Jan 4, 2014   ❤️ 2
    即使不获得任何商业利益,抓取大众点评网站数据明确违反了他们的许可协议
    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
        45
    zack  
       Jan 4, 2014
    采集数据这件事情本身真没有什么值得练手的,除非是想研究更尖端的爬虫数据。如果是要做一些数据分析的话,采样一些数据就够了,没必要去钻研那些反抓取的策略,那些东西来来回回也不过就是那几个套路,其实没什么乐趣,也不是什么值得好奇的问题,太多人天天在用粗糙的手法做这样的工作了。
    doublleft
        46
    doublleft  
       Jan 5, 2014
    @chens 好方法
    oldcai
        47
    oldcai  
    PRO
       Jan 6, 2014
    @freewizard “提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。”

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