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
lls8672
V2EX  ›  Python

在用 scrapy 爬取天猫商品评价时,爬了几次后发现爬取不了了,在浏览器里打开需要输入验证码,怎么破?

  •  
  •   lls8672 · 2016-04-25 13:44:53 +08:00 · 10366 次点击
    这是一个创建于 3119 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为评价是动态生成的,所以我自己按照评价页面的链接的规律构造链接,然后进行访问,下载,解析,但是几次之后,就不行了,于是我将自己构造的链接输入浏览器,提示要输验证码。。。可能是被天猫发现了,那要怎么做才能不被发现?
    27 条回复    2016-06-20 23:35:58 +08:00
    wind3110991
        1
    wind3110991  
       2016-04-25 14:03:39 +08:00
    你如果连续用同一个 ip 爬肯定要被 ban 掉吧
    hiboshi
        2
    hiboshi  
       2016-04-25 14:07:02 +08:00
    很明显被限制了,用 adsl vps 吧
    9hills
        3
    9hills  
       2016-04-25 14:10:42 +08:00
    用代理池爬,控制速度
    dxwwym
        4
    dxwwym  
       2016-04-25 14:12:13 +08:00 via iPhone
    每天数以百万的新评价,能评的过来?
    pubby
        5
    pubby  
       2016-04-25 14:22:30 +08:00
    降低访问频率!

    1. 登录账号,每个账号用一个独立的代理 ip ,控制访问频率(大概 10 秒一次,出现验证码几率会降低)
    2. 不登录账号,每个代理 ip 控制访问频率,需要很低频率才行,否则就不是验证码了而是直接让你登录,所以控制访问频率+切换 ip 吧。
    sosozzzx
        6
    sosozzzx  
       2016-04-25 15:19:17 +08:00
    神箭手云爬虫开放开发者功能啦~
    海量规则免费使用, 24 小时云端采集,
    舆情监控即时更新,自动同步多个网站,
    5 行代码创建专属于你的云爬虫!
    odirus
        7
    odirus  
       2016-04-25 15:25:09 +08:00   ❤️ 1
    selenium ,通过 chromedriver 连接 chrome 浏览器。

    解析也面前,代码里面检测是否出现了验证码页面或者弹窗,出现的时候使用 sleep 函数,等待人肉输入验证码,验证码输入完成之后,程序再接着运行。阿里云再神也识别不出你来。

    哈哈哈。之前在爬一个 google 验证吗的网站时就这么干的。
    hadoop
        8
    hadoop  
       2016-04-25 15:50:42 +08:00
    @hiboshi adsl vps 可以 linux 命令行拨号,对外提供代理 api 接口吗
    gimp
        9
    gimp  
       2016-04-25 15:54:12 +08:00
    selenium + 人肉打码
    azh7138m
        10
    azh7138m  
       2016-04-25 16:01:46 +08:00
    @sosozzzx [神箭手平台服务协议] 这个没有啊,根本看不到这个
    pubby
        11
    pubby  
       2016-04-25 16:28:05 +08:00   ❤️ 1
    @hadoop 可以的

    一般安装了 rp-pppoe ,没有的话自己装一下

    pppoe-setup 设置一下账号密码

    ifup ppp0 拨号

    重拨换 ip 用

    ifdown ppp0 && sleep 5 && ifup ppp0


    这些 vps 是这样的:
    给你一个管理 ip 和端口,然后 ssh -p <端口> root@管理 IP 连上去 拨号

    拨号后 ppp0 上会有动态 ip

    然后开个 socks5 或者 http 代理 (可能需要处理一下 iptables 规则)

    本地用的时候记得连那个 动态 ip : 代理端口
    hadoop
        12
    hadoop  
       2016-04-25 16:47:00 +08:00
    @pubby 老司机! 有推荐的商家推荐吗? 首富家分不清哪个好哪个坏
    fhefh
        13
    fhefh  
       2016-04-25 16:52:55 +08:00
    odirus
        14
    odirus  
       2016-04-25 17:05:34 +08:00
    @fhefh 不是哒, at 错了吧?

    selenium 人肉打码,任何验证码都可破,就是效率低。
    billion
        15
    billion  
       2016-04-25 17:05:35 +08:00
    @odirus 我以前试过使用 selenium+angurjs ,爬一个页面要 2 分钟,太慢了。
    odirus
        16
    odirus  
       2016-04-25 17:32:57 +08:00
    @billion 嗯, selenium 主要是用于爬那些变态页面,例如 新浪微博(大部分 JSONP ),某些采用 google 验证码的网站(既要鼠标点击又要选择里面的文字),好处是能够像普通浏览器一样渲染整个页面,还能通过 chromedriver, firefoxdriver 等连接器连接浏览器,做到一步步地可视化调试,调试完成后再换成 phantomjs 这种无界面浏览器部署在服务器上。
    pubby
        17
    pubby  
       2016-04-25 17:38:30 +08:00 via Android
    @odirus 淘宝登录时滑块验证能搞定吗?
    odirus
        18
    odirus  
       2016-04-25 17:44:55 +08:00
    @pubby 是这样的。如果通过连接器连接 chrome 、 firefox 的话,是自动打开一个干净的浏览器界面(没有 cookie 、历史纪录等等),你可以在程序里面检测是否有验证码,如果有则程序等待(这个时候可以手动操作浏览器的,你就可以拖动滑块了),通过验证码验证之后的后续的逻辑再让程序自动完成。

    如果你爬慢一点,可以登录验证一次,自动执行很多天,过几天检测到验证码界面时自动发短信到手机上嘛。
    pubby
        19
    pubby  
       2016-04-25 17:51:08 +08:00
    @odirus 嗯,抓取频率高了还是比较麻烦,输验证码会比清 cookie 改 ua ,重新登录频繁。

    如果要连续不间断高频次抓取,需要不停输验证码以及重新登录,搞得我都想做个简单 app 带身边随时人工操作介入了 -_-
    niceworld
        20
    niceworld  
       2016-04-25 21:11:35 +08:00
    你可以写个下载中间件,每抓个页面就更换一个代理,代理 ip 可以找免费分享的那种,抓个 1 、 2 千个,定时验证下就好了,基本可以用 3-5 天了
    herozzm
        21
    herozzm  
       2016-04-25 23:07:12 +08:00 via Android
    @9hills 求代理池
    geek123
        22
    geek123  
       2016-04-26 09:10:08 +08:00
    人工输入验证吗是终极解决办法,自动验证识别率太低。。
    ZnZt
        23
    ZnZt  
       2016-04-26 09:45:57 +08:00
    速度慢一点, 去找点代理
    yuriko
        24
    yuriko  
       2016-04-26 10:01:06 +08:00
    你这么玩肯定被干啊……
    人家反爬虫工作也不是吃素的啊……
    laodao
        26
    laodao  
       2016-06-20 23:30:32 +08:00
    @pubby 你好, adsl vps 感觉只能实现本地代理,因为在内网,感觉没法给其他服务器提供代理。不知道这种拨号服务器有办法实现给其他外网服务器提供代理吗?
    pubby
        27
    pubby  
       2016-06-20 23:35:58 +08:00 via Android
    @laodao ADSL 拨号后有外网 IP 的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2809 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 02:02 · PVG 10:02 · LAX 18:02 · JFK 21:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.