推荐学习书目
› 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 · Mar 24, 2015 · 13239 views
    This topic created in 4242 days ago, the information mentioned may be changed or developed.
    google得到伪装浏览器有两种选择:
    第一种:


    第二种:


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


    全部代码:
    Supplement 1  ·  Mar 24, 2015
    又可以了,不知道是什么回事....抓狂.....
    Supplement 2  ·  Mar 25, 2015
    谢谢大家的指点,就不一一回复了,不过都点了感谢。
    v2ex大家都很热心啊,非常感谢。
    39 replies  •  2015-03-25 10:52:19 +08:00
    xiaogui
    xiaogui
    Mar 24, 2015❤️1
    1
    抓的频率太快了吧
    jarlyyn
    jarlyyn
    Mar 24, 2015❤️1
    2
    没用python写过爬虫。

    但是伪装浏览器,

    首先是不是考虑有cookie?

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

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

    当然频率也是个问题。
    jarlyyn
    jarlyyn
    Mar 24, 2015❤️1
    3
    对了,还有reference_url?

    我记得当时是用chrome开network页,然后把所有的header都copy了一遍。
    messense
    messense
    Mar 24, 2015❤️1
    4
    用 requests 吧..... urllib2 太难用了。

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

    小白,现在目标是先把脚本运行起来。所以cookie等知识打算一边学一边补。非常感谢你的回答。
    dedewei
    dedewei
    OP
    Mar 24, 2015
    8
    @terrychang 非常感谢,带上cookie运行成功了
    dedewei
    dedewei
    OP
    Mar 24, 2015
    9
    @messense 谢谢给的建议
    dedewei
    dedewei
    OP
    Mar 24, 2015
    10
    @terrychang 运行了两分钟.....又403了.....
    dedewei
    dedewei
    OP
    Mar 24, 2015
    11
    @terrychang
    @messense
    @jarlyyn 我想问的是,是不是如果上面模拟浏览器的步骤不出错,就肯定能继续爬?还是说上面即使模拟浏览器成功了,依然有其他方式导致403?
    xiaogui
    xiaogui
    Mar 24, 2015
    12
    @dedewei “运行了两分钟.....又403了.....”主要是频率了吧
    dedewei
    dedewei
    OP
    Mar 24, 2015
    13
    @xiaogui 会不会是之前ip被屏蔽,等了很久,添加cookie再试的时候刚好解封了,所以才运行了几分钟? 频率是设置爬取的时间间隔?爬一个网页等5秒这样子?我试试。
    xiaogui
    xiaogui
    Mar 24, 2015
    14
    @dedewei 刚开始封,都是比如封你几分钟,但是抓取频率过高的话,这个时间会指树上升的。
    dedewei
    dedewei
    OP
    Mar 24, 2015
    15
    @dedewei 尝试了下,直接urllib2.urlopen(url)都返回403,应该不是频率问题吧
    dedewei
    dedewei
    OP
    Mar 24, 2015❤️1
    16
    @xiaogui 我好像理解错你说的频率了?
    terrychang
    terrychang
    Mar 24, 2015❤️1
    17
    不知道你带的是不是登录会员的cookie。
    登录你的豆瓣帐号,然后用firebug导出你的cookie试试。
    lerry
    lerry
    Mar 24, 2015❤️1
    18
    既然是伪装浏览器,就要尽可能的像浏览器一样
    使用 requests.Session 把浏览器的headers都带上,能应付大部分网站,有的要有Referer,有的要js执行了才行,就用 phantomjs
    理论上爬虫是防不住的,顶多是会限制频率罢了,这时侯你可以找一堆匿名代理
    hp19890515
    hp19890515
    Mar 24, 2015❤️1
    19
    之前做了个简单的爬虫爬大众点评的商户,也有这种情况,试了几次之后知道是频率的问题,于是每次403的时候就休息一会儿,每隔2分钟再尝试,等不403的时候就又继续运行了
    liyaoxinchifan
    liyaoxinchifan
    Mar 24, 2015❤️1
    20
    多ip才是王道
    em70
    em70
    Mar 24, 2015❤️2
    21
    豆瓣早就用频率监控了,经过测试,一分钟40次是临界点,抓一个等1秒就肯定没问题
    fork3rt
    fork3rt
    Mar 24, 2015❤️1
    22
    为什么不使用 requests + beautifulsoup ?
    vjnjc
    vjnjc
    Mar 24, 2015
    23
    挺好玩的,楼主你的程序借我用用啊,据说豆瓣里有很多隐藏的美女,顺便学学python ^^
    CaoZ
    CaoZ
    Mar 24, 2015❤️1
    24
    happywowwow
    happywowwow
    Mar 24, 2015❤️1
    25
    http://www.douban.com/group/haixiuzu/
    请不要害羞
    以前写过爬这个的
    hhh
    muyi
    muyi
    Mar 24, 2015 via Android❤️1
    26
    模拟容易造成IP被封,如楼上所提到的,用官方客户端的apikey,使用api来爬
    AnyOfYou
    AnyOfYou
    Mar 24, 2015❤️1
    27
    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
    justlikemaki
    Mar 24, 2015❤️1
    28
    ..我遇到过网站故意返回错误代码,然后还返回页面代码的。
    darmody
    darmody
    Mar 24, 2015❤️2
    29
    看你的代码没有加延时之类的东西,估计是抓取频率的问题
    v4dc
    v4dc
    Mar 25, 2015 via iPad❤️1
    30
    注意豆瓣的 header 里面的 bid
    v4dc
    v4dc
    Mar 25, 2015 via iPad
    31
    @aliao0019 headers
    dedewei
    dedewei
    OP
    Mar 25, 2015
    32
    @terrychang 没看懂,不过谢谢,以后遇到再试试
    dedewei
    dedewei
    OP
    Mar 25, 2015
    33
    @lerry lxml and Requests 似乎大家都在推荐这样,继续学习。谢谢指点!
    dedewei
    dedewei
    OP
    Mar 25, 2015
    34
    @caoz 多谢,当时顺手google了下,没找到,就放弃了。还没用过api,打算这就试试。非常感谢。
    dedewei
    dedewei
    OP
    Mar 25, 2015
    35
    @happywowwow 哈哈哈〜,提供很好的素材,这就爬去!!!!!!!!!!
    dedewei
    dedewei
    OP
    Mar 25, 2015
    36
    @AnyOfYou mark.....等再熟练点再好好看看......
    lerry
    lerry
    Mar 25, 2015
    37
    @dedewei 我用的PyQuery,可以像jQuery一样操作dom元素,很方便
    penjianfeng
    penjianfeng
    Mar 25, 2015
    38
    @happywowwow 进去看了下,终于明白为何以前他们说douban才是大黄了-_-||
    zjuster
    zjuster
    Mar 25, 2015
    39
    豆瓣的反爬虫机制都是被你们逼的..haha 请不要误会,我并没有恶意..
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3000 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 10:57 · PVG 18:57 · LAX 02:57 · JFK 05:57
    ♥ Do have faith in what you're doing.