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

2020-07-14 16:46:02 +08:00
 Te11UA
前提:爬取的是亚马逊。爬虫代码不变,俩 virtualenv 都装了一模一样的包,在同一台机子上,用同一个代理。

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

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

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

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

如果两个请求在各方面都是一致的,就不可能有差异…
tikazyq
2020-07-14 22:21:35 +08:00
上代码
Te11UA
2020-07-15 10:02:22 +08:00
@locoz 一致的,上级代理设置成一样的。HTTP 是一样的,SSL 倒是不太清楚呢……
Te11UA
2020-07-15 10:03:32 +08:00
@locoz 一致的,上级代理设置成一样的。HTTP 是一样的,SSL 倒是不太清楚呢……
@smplesugar 吼啊,tg 或者啥联系方式可以留一下~
@maoxs2 并不是,抓包和请求 httpbin 看了,不带 cookie,都正常
Te11UA
2020-07-15 10:05:02 +08:00
@rayhy 没有不同,一毛一样
@ungrown 新建一个可能暂时正常,但是运行多了一样扑街
ungrown
2020-07-15 10:07:15 +08:00
@Te11UA #16
那要不,写个脚本,遍历路径,逐文件比较?看看多了什么少了什么改了什么。
qqqqq9898
2020-07-15 10:19:49 +08:00
之前做过亚马逊的爬虫 我猜测你的情况是被后台取了设备指纹, 走代理软件会更改你的请求头, 另外我认为, 你一个环境被检测到了, 那么另一个环境也快了.
locoz
2020-07-15 10:46:36 +08:00
@Te11UA #14 如果 IP 是一致的,但上了代理之后都能变正常,那么就大概率是 SSL/TLS 层的问题。建议试一下使用 Wireshark 分别抓一下开抓包和没开抓包两种情况下的两个请求包,并仔细对比其中的 SSL/TLS 连接部分。
Te11UA
2020-07-15 11:08:44 +08:00
@qqqqq9898 请问又什么方向呢,设备指纹是哪个部分,劳烦指教

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/689979

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX