首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

淘宝反爬求解

  •  
  •   frogex · 98 天前 · 4935 次点击
    这是一个创建于 98 天前的主题,其中的信息可能已经有所发展或是发生改变。
    爬虫新人,主要要爬淘宝一些搜索结果和商品的销量。
    参考的帖子非常多:
    https://intoli.com/blog/making-chrome-headless-undetectable/
    https://antoinevastel.com/bot%20detection/2018/01/17/detect-chrome-headless-v2.html

    目前已经做的事情:
    1.mitmdump 挂脚本,拦截 js ( sufei_data/3.6.8/index.js )替换其中一些检测,比如知名的 f.webdriver,$cdc_asdjflasutopfhvcZLmcfl_
    2.mitmdump 在页面 load 时设置了 navigator.language(注意,不是 languages,淘宝的 index.js 检测的没有复数),navigator.webdriver,window.chrome,window.navigator.permissions.query 属性
    3.分析了 index.js ,测试了可能鉴定爬虫的特征代码( L = [r, i, a, e, l],B = [m, h, v, d, g];),这几个函数返回值 headless 和非 headless 下都是一致的

    结果:
    非 headless 下自动登陆大概率(90%)能通过,headless 下似乎一次都过不了。所以这下就郁闷了,不明白究竟是哪里遗漏了呢? headless 和非 headless 还有什么特征不同吗?
    70 回复  |  直到 2019-03-09 16:37:04 +08:00
        1
    frogex   98 天前
    最初以为仅仅是滑块轨迹问题,但实际上,用 webdriver 打开 chrome 后,怎么手动都滑不过,后来才知道可能有检测环境之类。 说白也很难,如果特征有 100 个,不同的有 20 个,淘宝采集了 4 个,你没防那就被识破了
        2
    WaJueJiPrince   98 天前
    人工登陆,然后记录登陆信息可以吗?
    使用 Selenium 中的 user-data-dir 参数。另外,淘宝好像是登陆以后频繁的翻页也会触发验证码。
        3
    yulgang   98 天前
    @frogex 爬虫不会。但是考虑过爬手机页面么?说不定会没有那么多检测。
        4
    a312901237   98 天前
    你 QQ 多少,联系我 Q312901237
        5
    frogex   98 天前
    @WaJueJiPrince
    本质不是想登陆,而是想过滑块,因为现在手工记录 cookie 去爬价格(商品详情页),还是时不时要验证
        6
    autulin   98 天前 via iPhone
    试过现在的版本很容易触发登陆机制,就算登陆了多点几下就要验证,也没有那么多帐号来试,想知道楼主怎么解决这个问题
        7
    frogex   98 天前
    @yulgang 手机页查过资料,据说也反爬, 刚试了下 fiddler 抓不到,不知道走的是不是二进制协议
        8
    dengtongcai   98 天前 via iPhone
    扫码登录吧…账密太多验证了
        9
    frogex   98 天前
    @autulin 登陆没啥,手工获取 cookie,我的任务每周爬个 3 天就差不多可以了。 问题主要是滑块不好过,非 headless 下大概率过,但这显然不够好
        10
    momocraft   98 天前
    无头有头总归有区别的。如果无头不会真的渲染到屏幕,那 canvas 的行为可能就大不一样。

    以前甚至见过用 canvas 字体渲染差异做浏览器指纹的论文..
        11
    zr8657   98 天前
    淘宝的销量只算今天往前推 30 天,LZ 打算怎么算日销量?商品列表的话就算你是正常用户翻个 7-8 页左右也会有验证码,selenium 的话大概 5-6 页会有滑块,再往后会有手机验证码不知你遇到没。详情页不需要登录就有价格啊,我是直接堆 ip
        12
    frogex   98 天前
    @momocraft
    我主要看了下 taobao 的那个 index.js 会有这么一句
    function i() {
    if (a())
    return !1;
    try {
    return !!u.createElement("canvas").getContext("webgl")
    } catch (n) {
    return !1
    }
    }
    function a() {
    return "ontouchstart"in u
    }
    实际上对于 i()的返回值,有头无头都试过了是一样的,所以姑且认为没靠这些检查。
    话说这也是个死坑,哪天淘宝又改了这个 js 用别的检测方法也就没用了
        13
    5200   98 天前
    之前也卡在这一块,后面通过比较 low 的方法解决了。
        14
    frogex   98 天前
    @zr8657
    其实是要拿详情页的成交量而不是价格,实时的数据里面和外面有些不同的,包括价格。
    手机验证码没遇到。翻页的验证码我是尝试 3 次滑动,没过 kill 掉记录时间,让父进程 x 分钟后拉起接着爬,虽然慢一点好歹也可以爬完。商品搜索列表页封的不严,但商品详情页就很严了,kill 很多次都还弹验证
        15
    ioven   98 天前
    如果数量不少很多,用 firefox49 + imacros 试试?
        16
    frogex   98 天前
    @5200 怎么 low 的方法?只要不人工就不 low 啊
    2 个月前有一个接口可以拿
    https://detailskip.taobao.com/service/getData/1/p1/item/detail/sib.htm?itemId=x&modules=dynStock,qrcode,viewer,price,duty,xmpPromotion,delivery,activity,fqg,zjys,couponActivity,soldQuantity,originalPrice,tradeContract&callback=onSibRequestSuccess,
    加 cookie 和 referer 就好了,现在封了,要在 cookie 里带一个 x5sec 才能过,不然返回 rgv587 这样的东西。而这个 x5sec 是通过滑块后才能获取,且只有半小时时间。
        17
    frogex   98 天前
    @ioven 不是工具问题,而是怎么突破反爬啊
        18
    5200   98 天前
    @frogex
    之前也是用 python,结果只要是通过 python 唤起的浏览器就一个劲的验证码。
    后面专门拿了一台电脑,挂脚本,使用 AHK 写了一个小脚本。
    模拟人工登录,拉取一些订单记录什么的。
    获取一些信息,通过浏览器的控制器获取。
    淘宝对页面刷新有频率限制,中间间隔几分钟再获取,
    貌似频繁的翻页,和访问淘宝页面很容易出验证码,
    他的频繁好像是针对的是这个 ip 下,如果 ip 里面有一个人有验证码了,
    另外一个同 IP 下的账户也会出验证码。
        19
    ioven   98 天前
    @frogex 抓包 app 数据试试,一般 app 更容易
        20
    frogex   98 天前
    @5200 感觉不是频率这么简单吧,我要的数据不是特别多,所以爬的时候很克制了。 不过目前能爬完也是 kill + 等待拉起的方式,过搜索列表页还可以,过商品详情页就很难了,有时一直弹窗要验证
        21
    frogex   98 天前
    @ioven app 的逆向就要破协议了,这个我更加没经验,有什么方法吗
        22
    5200   98 天前
    @frogex 你目前是使用什么方式的呢,
    我之前也尝试过很多种工具和语言方法,
    有些工具就连登录都过不了,
    淘宝里面的检测方法多得很,
    也没精力去一个一个研究,
    最后就使用脚本类,模拟键盘鼠标,
    这个网页端肯定是检测不到的,
    目前稳定运行了半年多了。
        23
    frogex   98 天前   ♥ 1
    @5200
    你这个用按键精灵?感觉更不好稳定吧,如果位置什么的有偏差就做不了啊
    我目前是
    1.selenium + chrome headless, 爬列表页面,价格等数据有小几率获取,获取不到的记录-1。
    2.另外启 selenium + chrome noheadless,随机获取-1 的数据循环重新请求价格,销量。
    3.cookie 每天更换一次,chrome noheadless,每天早上 9 点爬虫会更新 cookie,时间不对(不是当天的 cookie )就手动扫码获取 cookie

    如果 1 爬完了,2 这里还有大量的-1 记录,我就有点慌了,会不停的手工获取 x5sec 的数据直接抓接口了
        24
    murmur   98 天前
    淘宝的代码里会检查 webdriver 的标志 需要重新编译改变量名
        25
    frogex   98 天前
    @murmur
    这些在问题里都提到了,都做过了啊
        26
    farverfull   98 天前
    我也在其他地方遇到一样的滑块验证,只要是 selenium 调用的浏览器都无法划过去,挠头。结果也是用了 @5200 的方法干,不太稳定就是
        27
    5200   98 天前   ♥ 1
    @frogex AHK 类似按键吧,位置什么的多一点判断就行,
    有些位置比较不好识别我直接使用谷歌的控制台。
    之前我也是 selenium + chrome headless,但是始终过不了登录的检测,
    只要通过 selenium 启动起来的 chrome,就算手动登录那个滑块也通过不了。
    反正之前折腾了一个星期也算是解决了。
    中间偶尔位置有偏差的就修修补补了,现在也算能稳定了。
    不过还在寻求新的更好的方法。
        28
    locoz   98 天前
    @ioven #19 hhhhhhhhh 阿里的 APP 只会更难,不会更容易。阿里系 APP 通用加密头了解一下
        29
    frogex   98 天前
    @5200
    阿西吧, 这样也就必须一台机器前台运行了吧,如果抓取量大了就很慢了。 另外,你是怎么获取数据?
        30
    yangsi   97 天前 via iPhone
    在虚拟机里面运行和前台运行有区别吗? 还有能不能用其他浏览器?
        31
    ioven   97 天前
    @locoz 忘了还有这玩意。。。
        32
    yumenlong   97 天前
    换 pyqt 或者其他的非 selenium 驱动浏览器方案可以过检测
        33
    frogex   97 天前
    @yangsi
    当然可以,主要是不能确定靠什么检测的,试过 PhantomJS 也是不行
        34
    frogex   97 天前
    @yumenlong
    不会 pyqt,不过应该不只是 selenium 的问题,光看 taobao 的 js 就有 chromedriver 的指纹检测
        35
    yinaqu   97 天前
    兄弟,你是写 java 还是 python。
        36
    lkwfive   97 天前
    win10 和 OS_x 用 puppeteer 亲测自动登录有效
        37
    frogex   97 天前
    @yinaqu
    工作很多年了,90%时间写 C++
        38
    frogex   97 天前
    @lkwfive
    没试过这个,有空试下吧,不过用什么工具 taobao 应该还是都会检测的
        39
    soulmine   97 天前
    反爬这东西 你觉得 tb 有多少人在搞
        40
    yinaqu   97 天前
    @frogex 过滑块之前只检测了 navigator.webdriver 这个特征,最近 TB 更新了验证,只改这个特征不行了。然后呢,可以很明确的说过不了滑块并不是因为 selenium 被检测到,而是 webdriver 的某些特征被检测到了(即使非 headless 用手拖也过不了),因为我使用的一款工具底层使用 selenium 但是可以过滑块。
        41
    dengtongcai   97 天前
    我已经把 淘宝芝麻分,订单明细,售后地址爬了
        42
    frogex   97 天前
    @soulmine
    我也知道,公司安全的负责人也说,你一个人怎么能应付一个团队,不要硬肛,要想别的办法,但什么大淘客还是不行啊,搜不到我要的。 但这爬东西又是公司必须的任务,之前从来没搞过,忧虑了好久,总没彻底去解决。

    淘宝也有付费 api,不过 leader 还是希望能神不知鬼不觉的用爬虫比较好
        43
    frogex   97 天前
    @yinaqu
    淘宝检测了什么我不确定是不是只在 sufei_data 那个 js 里,从我分析看,至少有检测了 10 个函数,至少 headless 都 pass 了和非 headless 一样的结果。其他的实在看不下去了,都是混淆过的代码,命名 abcdefg,函数各种混着赋值,似乎要人肉维护一个函数调用关系
        44
    frogex   97 天前
    @dengtongcai
    爬简单,要能稳定长期、全自动化、有效的爬才难啊
        45
    winglight2016   97 天前
    我在 mac 上的 chrome,纯手动打开都会反复要求登录,天猫的商品实际价格也出不来,不知道是啥情况?
        46
    beforeuwait   97 天前
    阿里的反爬太厉害了
        47
    yanzixuan   97 天前
    阿里的反爬,我特么正常使用也经常不行啊。动不动就要验证。。。
        48
    ctro15547   97 天前
    机子支持开几个 android 虚拟机?
        49
    dengtongcai   97 天前
    @frogex 扫码登录不能做吗,我就是扫码
        50
    NonClockworkChen   97 天前
    要爬淘宝,我内心是拒绝的
        51
    frogex   97 天前
    @dengtongcai
    请看全文,不仅是登陆,是要长期稳定的爬,且能过各种滑块,目前最终方案在 23F, 放 win 虚拟机跑了
        52
    IWSR   97 天前
    你们就没考虑过淘宝写反爬的也在 V2EX 里面看这贴吗
        53
    frogex   96 天前
    @IWSR
    那能怎么办?讨论爬虫的帖子超级多,可讨论反爬的实在太少了,工作这么久身边也基本没一个人做过这些的
        54
    xiao38245   96 天前
    我之前爬过手机端淘宝, m.taobao.com 加密的参数只有一个, 我记得是 md5 加密来着, 还算简单, 知乎有帖子
        55
    iamdaguduizhang   96 天前
        56
    iamdaguduizhang   96 天前
    现在这个也不能爬了,
        57
    frogex   96 天前
    @xiao38245
    手机淘宝是二进制的协议吧,要破协议,这个我没经验。而且直接抓接口的方法淘宝随便封更容易,感觉还是模拟人的操作稍微靠谱点
        58
    wc110302   94 天前
    修改 chromedriver 源码以及 mitmdump 挂脚本,拦截 js 的方法我都使用过,noheadless 确实都能大概率过,但是 headless 就一次过不了,也就说只能在 windows 上跑了,暂时也没想到什么好的方法能挂在 liunx 上。先 mark 一下
        59
    keyakizaka46   94 天前
    @frogex 最近接了一个爬取天猫的任务,也是被各种反爬搞的焦头烂额。我可以有酬买你的源码吗?
        60
    yinaqu   93 天前
    @wc110302 linux 不是也有图形界面吗
        61
    mrcomer   91 天前
    @frogex 老哥,加我 wx:16620341036
        62
    iamdaguduizhang   91 天前
    @keyakizaka46 我有可以爬取淘宝 h5 的代码,可以用
        63
    keyakizaka46   91 天前
    @iamdaguduizhang 加我 QQ:690930494
        64
    okface   89 天前
    @iamdaguduizhang 老哥,加我 qq 394115733
        65
    okface   89 天前
    @frogex 老铁,我问一句,你们用了多少个淘宝账号在爬数据?这些账号哪里来的?是账号更容易被封还是 IP 更容易被封?
        66
    okface   87 天前
    @5200 老铁,脚本类的你们每天能爬多大量级
        67
    love9918   72 天前
    之前研究过一段,淘宝现在好像没验证了,使用 cookie 随机 useragent 外加随机代理跳过登录,直接爬取信息
        68
    thursday   56 天前
    有需要爬淘宝 app 需求的可以加我 qq 都能爬 348️⃣531171
        69
    thursday   56 天前
    用的是 app 接口计算 xsign
        70
    515576745   47 天前
    @love9918 一直有验证呀...
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2652 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 13:42 · PVG 21:42 · LAX 06:42 · JFK 09:42
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1