V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2014-01-03 09:38:56 +08:00 · 46528 次点击
    这是一个创建于 4012 天前的主题,其中的信息可能已经有所发展或是发生改变。
    没事研究采集,准备拿大众点评网练手
    形式如下
    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 条回复    2016-09-18 15:42:23 +08:00
    robinshi2010
        1
    robinshi2010  
       2014-01-03 10:07:30 +08:00
    顶一下。这个问题也好奇。坐等明白人回复。
    jtacm
        2
    jtacm  
       2014-01-03 10:10:55 +08:00   ❤️ 1
    有一个思路,反编译大众点评的andriod客户端,看andriod客户端用什么协议去读取数据的,模仿之。
    Mr2
        3
    Mr2  
       2014-01-03 10:12:54 +08:00
    @jtacm 客户端不是一个IP也没有短时间访问大量商店页面吧
    pirex
        4
    pirex  
       2014-01-03 10:15:47 +08:00
    你可以先采集IP地址来练手
    Ever
        5
    Ever  
       2014-01-03 10:17:41 +08:00   ❤️ 2
    去应聘dianping DBA.
    kchum
        6
    kchum  
       2014-01-03 10:33:51 +08:00
    @Ever 好方法,哈哈。
    est
        7
    est  
       2014-01-03 10:42:06 +08:00   ❤️ 1
    @Ever
    @kchum

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

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

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

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

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