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 · 11748 次点击
    这是一个创建于 3567 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   ·   实用小工具   ·   987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 23:22 · PVG 07:22 · LAX 15:22 · JFK 18:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.