推荐学习书目
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
Te11UA
V2EX  ›  Python

最近爬虫遇到了一个吊诡的事情:更换 virtualenv 环境会导致反爬

  •  
  •   Te11UA · Jul 14, 2020 · 5008 views
    This topic created in 2152 days ago, the information mentioned may be changed or developed.
    前提:爬取的是亚马逊。爬虫代码不变,俩 virtualenv 都装了一模一样的包,在同一台机子上,用同一个代理。

    其中一个环境一直出验证码和 503,但是切换到另外一个环境上却都是正常响应。另外,使用抓包软件看的话,一直出验证码的环境走抓包软件代理后也会正常,但一不用就恢复原状……

    使用了最简单的 requests demo 也是一模一样的情况

    有没有同学遇到过一样的问题呢? 或者说有什么排查点呢?

    PS: 被反爬的环境是一直在运行爬虫代码的,目测可能是有机器学习机制,但是特征点完全找不到在哪,HTTP 层是一模一样的,TCP 层粗略看了下也没什么区别……
    31 replies    2022-09-19 15:28:51 +08:00
    zarte
        1
    zarte  
       Jul 14, 2020
    ip 导致的吧
    Te11UA
        2
    Te11UA  
    OP
       Jul 14, 2020
    @zarte 不是,用同一个 IP,两个 venv 是不一样的结果
    ruanimal
        3
    ruanimal  
       Jul 14, 2020
    应该是 requests 版本不一样的,可能改了默认 header 、session 处理等
    Te11UA
        4
    Te11UA  
    OP
       Jul 14, 2020
    @ruanimal 所有依赖包是一模一样的,所以我才有疑问……
    licsber
        5
    licsber  
       Jul 14, 2020
    贴一下 pip list 或者 conda list
    Te11UA
        6
    Te11UA  
    OP
       Jul 14, 2020
    ![image.png]( https://i.loli.net/2020/07/14/e6gt32y8FYViPUh.png)
    @Licsber 其实都试过改版本了,木有啥区别
    ungrown
        7
    ungrown  
       Jul 14, 2020
    也就是说唯一的区别是两个环境的“新旧程度”不同?
    那可能还是有什么残留的数据或者配置在捣鬼。
    为控制变量,不妨再新建一个……
    phpfpm
        8
    phpfpm  
       Jul 14, 2020
    我建议你把 request 打到你自己的一个网站上比较一下 request 的区别
    rayhy
        9
    rayhy  
       Jul 14, 2020   ❤️ 1
    在两个环境分别请求一下 http://httpbin.org/anything 看看结果有啥不同吧
    smplesugar
        10
    smplesugar  
       Jul 14, 2020
    老哥,我也是采集亚马逊和你出现了同样的问题,希望可以探讨一下
    maoxs2
        11
    maoxs2  
       Jul 14, 2020 via Android
    会不会是这样的。venv1 先访问然后拿到一个 cookie,之后访问都带着 cookie 走。然后测试 venv2 的时候刚开始没带 cookie 然后就直接被 ban 了?
    locoz
        12
    locoz  
       Jul 14, 2020 via Android
    排除法。
    你确定以及肯定你在「用抓包软件」和「没用抓包软件」两种情况下的「两次请求」,IP 都一致吗?有可能只是因为你「忘记设置上级代理」了所以在抓包的时候才会得到一样的结果。
    你确定以及肯定抓包时看到的所有东西都一致吗?比如 SSL/TLS 层那个握手时的「支持的加密套件」甚至是具体的版本号。

    如果两个请求在各方面都是一致的,就不可能有差异…
    tikazyq
        13
    tikazyq  
       Jul 14, 2020
    上代码
    Te11UA
        14
    Te11UA  
    OP
       Jul 15, 2020
    @locoz 一致的,上级代理设置成一样的。HTTP 是一样的,SSL 倒是不太清楚呢……
    Te11UA
        15
    Te11UA  
    OP
       Jul 15, 2020
    @locoz 一致的,上级代理设置成一样的。HTTP 是一样的,SSL 倒是不太清楚呢……
    @smplesugar 吼啊,tg 或者啥联系方式可以留一下~
    @maoxs2 并不是,抓包和请求 httpbin 看了,不带 cookie,都正常
    Te11UA
        16
    Te11UA  
    OP
       Jul 15, 2020
    @rayhy 没有不同,一毛一样
    @ungrown 新建一个可能暂时正常,但是运行多了一样扑街
    ungrown
        17
    ungrown  
       Jul 15, 2020
    @Te11UA #16
    那要不,写个脚本,遍历路径,逐文件比较?看看多了什么少了什么改了什么。
    qqqqq9898
        18
    qqqqq9898  
       Jul 15, 2020
    之前做过亚马逊的爬虫 我猜测你的情况是被后台取了设备指纹, 走代理软件会更改你的请求头, 另外我认为, 你一个环境被检测到了, 那么另一个环境也快了.
    locoz
        19
    locoz  
       Jul 15, 2020
    @Te11UA #14 如果 IP 是一致的,但上了代理之后都能变正常,那么就大概率是 SSL/TLS 层的问题。建议试一下使用 Wireshark 分别抓一下开抓包和没开抓包两种情况下的两个请求包,并仔细对比其中的 SSL/TLS 连接部分。
    Te11UA
        20
    Te11UA  
    OP
       Jul 15, 2020
    @qqqqq9898 请问又什么方向呢,设备指纹是哪个部分,劳烦指教
    Te11UA
        21
    Te11UA  
    OP
       Jul 15, 2020
    @qqqqq9898 如果说是 InterfaceID 和 MAC 地址的话,抓包看都是一模一样的
    smplesugar
        22
    smplesugar  
       Jul 15, 2020
    wx base64: bHN6OTU5
    Te11UA
        23
    Te11UA  
    OP
       Jul 15, 2020
    @locoz 敢问用 Python 跑的话,抓包怎么解密 SSL ?只用过浏览器的 SSLKEY
    qqqqq9898
        24
    qqqqq9898  
       Jul 15, 2020
    @Te11UA 包括但不限于 CPU 内存 插件 UA 时区 GPU 分辨率 浏览器指纹 还有于用验证的 metadata 等等, 供你参考
    hushao
        25
    hushao  
       Jul 15, 2020 via iPhone
    看下某些地方是不是有随机的可能?
    locoz
        26
    locoz  
       Jul 15, 2020
    @Te11UA #23 emmm ?不需要解密啊,看握手的那部分就好了。
    Te11UA
        27
    Te11UA  
    OP
       Jul 15, 2020
    @qqqqq9898 你说的这些是反爬用到的,用 chromedp 和 selenium 之类的可以操作,但是我想问的是俩 Python 环境之间有什么差别会导致这种现象呢? CPU 内存之类的应该不会有差别吧
    wangritian
        28
    wangritian  
       Jul 15, 2020
    直觉上是某个 http header 引起的,http 版本? keep-alive ?
    qqqqq9898
        29
    qqqqq9898  
       Jul 15, 2020
    @Te11UA 给你一个思考方向 具体的问题只能你自己调试了 我不用 PYTHON 和无头做爬虫 所以你的问题虽然大概是出在这方面 但我没办法给你具体的解决方法
    zhbzhbzhbz
        30
    zhbzhbzhbz  
       Jul 15, 2020
    @rayhy 这个厉害了~
    PEax
        31
    PEax  
       Sep 19, 2022
    老哥,遇到了同样的问题,解决了吗
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2995 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 69ms · UTC 06:07 · PVG 14:07 · LAX 23:07 · JFK 02:07
    ♥ Do have faith in what you're doing.