爬豆瓣相册遇到 403,伪装浏览器不成功,呼叫总部... - V2EX
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
dedewei
V2EX    Python

爬豆瓣相册遇到 403,伪装浏览器不成功,呼叫总部...

  •  
  •   dedewei 2015-03-24 12:02:11 +08:00 12155 次点击
    这是一个创建于 3856 天前的主题,其中的信息可能已经有所发展或是发生改变。
    google得到伪装浏览器有两种选择:
    第一种:


    第二种:


    还是返回403,请问哪里出错了?


    全部代码:
    第 1 条附言    2015-03-24 13:22:46 +08:00
    又可以了,不知道是什么回事....抓狂.....
    第 2 条附言    2015-03-25 08:24:38 +08:00
    谢谢大家的指点,就不一一回复了,不过都点了感谢。
    v2ex大家都很热心啊,非常感谢。
    39 条回复    2015-03-25 10:52:19 +08:00
    xiaogui
        1
    xiaogui  
       2015-03-24 12:20:09 +08:00   1
    抓的频率太快了吧
    jarlyyn
        2
    jarlyyn  
       2015-03-24 12:26:15 +08:00   1
    没用python写过爬虫。

    但是伪装浏览器,

    首先是不是考虑有cookie?

    其次是否考虑支持js的库?

    第三是不是踩到了陷阱链接?

    当然频率也是个问题。
    jarlyyn
        3
    jarlyyn  
       2015-03-24 12:28:52 +08:00   1
    对了,还有reference_url?

    我记得当时是用chrome开network页,然后把所有的header都copy了一遍。
    messense
        4
    messense  
       2015-03-24 12:37:34 +08:00   1
    用 requests 吧..... urllib2 太难用了。

    豆瓣反爬虫机制比较厉害,用很多代理 ip 去抓比较有效。ban 了就换代理。
    terrychang
        5
    terrychang  
       2015-03-24 12:40:46 +08:00   1
    带上cookie看看
    alangz
        6
    alangz  
       2015-03-24 12:43:00 +08:00   1
    我抓取豆瓣小组内容的时候也是403,但是添加了UserAgent之后就可以了。不知道你为何不可以,当然用的时java。
    dedewei
        7
    dedewei  
    OP
       2015-03-24 12:48:13 +08:00
    @jarlyyn 试过把所有header除了cookie都copy一遍,也不行。添加了Referer也还是不行。

    小白,现在目标是先把脚本运行起来。所以cookie等知识打算一边学一边补。非常感谢你的回答。
    dedewei
        8
    dedewei  
    OP
       2015-03-24 12:51:41 +08:00
    @terrychang 非常感谢,带上cookie运行成功了
    dedewei
        9
    dedewei  
    OP
       2015-03-24 12:53:18 +08:00
    @messense 谢谢给的建议
    dedewei
        10
    dedewei  
    OP
       2015-03-24 12:57:02 +08:00
    @terrychang 运行了两分钟.....又403了.....
    dedewei
        11
    dedewei  
    OP
       2015-03-24 12:58:56 +08:00
    @terrychang
    @messense
    @jarlyyn 我想问的是,是不是如果上面模拟浏览器的步骤不出错,就肯定能继续爬?还是说上面即使模拟浏览器成功了,依然有其他方式导致403?
    xiaogui
        12
    xiaogui  
       2015-03-24 13:00:39 +08:00
    @dedewei “运行了两分钟.....又403了.....”主要是频率了吧
    dedewei
        13
    dedewei  
    OP
       2015-03-24 13:06:03 +08:00
    @xiaogui 会不会是之前ip被屏蔽,等了很久,添加cookie再试的时候刚好解封了,所以才运行了几分钟? 频率是设置爬取的时间间隔?爬一个网页等5秒这样子?我试试。
    xiaogui
        14
    xiaogui  
       2015-03-24 13:07:37 +08:00
    @dedewei 刚开始封,都是比如封你几分钟,但是抓取频率过高的话,这个时间会指树上升的。
    dedewei
        15
    dedewei  
    OP
       2015-03-24 13:09:28 +08:00
    @dedewei 尝试了下,直接urllib2.urlopen(url)都返回403,应该不是频率问题吧
    dedewei
        16
    dedewei  
    OP
       2015-03-24 13:13:03 +08:00   1
    @xiaogui 我好像理解错你说的频率了?
    terrychang
        17
    terrychang  
       2015-03-24 13:22:49 +08:00   1
    不知道你带的是不是登录会员的cookie。
    登录你的豆瓣帐号,然后用firebug导出你的cookie试试。
    lerry
        18
    lerry  
       2015-03-24 13:33:27 +08:00   1
    既然是伪装浏览器,就要尽可能的像浏览器一样
    使用 requests.Session 把浏览器的headers都带上,能应付大部分网站,有的要有Referer,有的要js执行了才行,就用 phantomjs
    理论上爬虫是防不住的,顶多是会限制频率罢了,这时侯你可以找一堆匿名代理
    hp19890515
        19
    hp19890515  
       2015-03-24 13:47:23 +08:00   1
    之前做了个简单的爬虫爬大众点评的商户,也有这种情况,试了几次之后知道是频率的问题,于是每次403的时候就休息一会儿,每隔2分钟再尝试,等不403的时候就又继续运行了
    liyaoxinchifan
        20
    liyaoxinchifan  
       2015-03-24 13:52:22 +08:00   1
    多ip才是王道
    em70
        21
    em70  
       2015-03-24 13:54:27 +08:00   2
    豆瓣早就用频率监控了,经过测试,一分钟40次是临界点,抓一个等1秒就肯定没问题
    fork3rt
        22
    fork3rt  
       2015-03-24 13:58:57 +08:00   1
    为什么不使用 requests + beautifulsoup ?
    vjnjc
        23
    vjnjc  
       2015-03-24 14:11:57 +08:00
    挺好玩的,楼主你的程序借我用用啊,据说豆瓣里有很多隐藏的美女,顺便学学python ^^
    caoz
        24
    caoz  
       2015-03-24 16:28:37 +08:00   1
    happywowwow
        25
    happywowwow  
       2015-03-24 16:37:56 +08:00   1
    http://www.douban.com/group/haixiuzu/
    请不要害羞
    以前写过爬这个的
    hhh
    muyi
        26
    muyi  
       2015-03-24 17:06:58 +08:00 via Android   1
    模拟容易造成IP被封,如楼上所提到的,用官方客户端的apikey,使用api来爬
    AnyOfYou
        27
    AnyOfYou  
       2015-03-24 17:12:41 +08:00   1
    http://doc.scrapy.org/en/0.24/topics/practices.html#bans
    Scrapy 的文档中有一点关于如何防治爬虫被 Ban 的方法:

    rotate your user agent from a pool of well-known ones from browsers (google around to get a list of them)
    disable cookies (see COOKIES_ENABLED) as some sites may use cookies to spot bot behaviour
    use download delays (2 or higher). See DOWNLOAD_DELAY setting.
    if possible, use Google cache to fetch pages, instead of hitting the sites directly
    use a pool of rotating IPs. For example, the free Tor project or paid services like ProxyMesh
    use a highly distributed downloader that circumvents bans internally, so you can just focus on parsing clean pages. One example of such downloaders is Crawlera
    justlikemaki
        28
    justlikemaki  
       2015-03-24 17:34:46 +08:00   1
    ..我遇到过网站故意返回错误代码,然后还返回页面代码的。
    darmody
        29
    darmody  
       2015-03-24 18:49:09 +08:00   2
    看你的代码没有加延时之类的东西,估计是抓取频率的问题
    aliao0019
        30
    aliao0019  
       2015-03-25 00:39:38 +08:00 via iPad   1
    注意豆瓣的 header 里面的 bid
    aliao0019
        31
    aliao0019  
       2015-03-25 00:41:48 +08:00 via iPad
    @aliao0019 headers
    dedewei
        32
    dedewei  
    OP
       2015-03-25 08:20:03 +08:00
    @terrychang 没看懂,不过谢谢,以后遇到再试试
    dedewei
        33
    dedewei  
    OP
       2015-03-25 08:22:49 +08:00
    @lerry lxml and Requests 似乎大家都在推荐这样,继续学习。谢谢指点!
    dedewei
        34
    dedewei  
    OP
       2015-03-25 08:28:22 +08:00
    @caoz 多谢,当时顺手google了下,没找到,就放弃了。还没用过api,打算这就试试。非常感谢。
    dedewei
        35
    dedewei  
    OP
       2015-03-25 08:29:02 +08:00
    @happywowwow 哈哈哈,提供很好的素材,这就爬去!!!!!!!!!!
    dedewei
        36
    dedewei  
    OP
       2015-03-25 08:30:24 +08:00
    @AnyOfYou mark.....等再熟练点再好好看看......
    lerry
        37
    lerry  
       2015-03-25 09:56:26 +08:00
    @dedewei 我用的PyQuery,可以像jQuery一样操作dom元素,很方便
    penjianfeng
        38
    penjianfeng  
       2015-03-25 10:00:41 +08:00
    @happywowwow 进去看了下,终于明白为何以前他们说douban才是大黄了-_-||
    zjuster
        39
    zjuster  
       2015-03-25 10:52:19 +08:00
    豆瓣的反爬虫机制都是被你们逼的..haha 请不要误会,我并没有恶意..
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1149 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:17 PVG 07:17 LAX 16:17 JFK 19:17
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86