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

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

  •  
  •   Te11UA · 2020-07-14 16:46:02 +08:00 · 3945 次点击
    这是一个创建于 1353 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前提:爬取的是亚马逊。爬虫代码不变,俩 virtualenv 都装了一模一样的包,在同一台机子上,用同一个代理。

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

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

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

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

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