1
abcbuzhiming 2017-10-17 11:02:00 +08:00
很简单,不是你把 head 伪装成浏览器,对面就会真傻逼的觉得你就是真人的,识别爬虫的机制多的很,最简单的一种,楼主你的机器人有伪装请求频率吗,人类可做不到机器那么有规律的行为。
再狠一点的,js 里做点手脚,你的爬虫不执行 js,也会被发现 |
2
imn1 2017-10-17 11:13:49 +08:00
10060 是超时,跟 header 没关系
|
3
jin6220 OP @imn1 我把 timeout 设置成 60 秒了 但是要获取的那个数字几乎每秒都在变动 我估计对方发现这个请求不是真人 故不选择响应了。。。
|
4
jin6220 OP @abcbuzhiming
有啊 time.sleep(0.2) 我把这个数字改大一点试一下吧 。 因为要爬取的数字类似股票价格变化,每秒都在 变化好几次,原网页的数字应该是动态加载出来的,我按 f12 获取那个真实的地址了然后 request 请求了网址。我不知道用 requsts 直接请求真实地址的方式跟浏览器动态加载原网页出来的效果,对方能不能识别出来。 |
5
Va1n3R 2017-10-17 12:42:33 +08:00
一般都有反爬虫策略吧?比如你的频率太快了。建议上代理,或者用分布式的爬虫。
|
6
metorm 2017-10-17 12:45:47 +08:00 via Android
应该是反爬虫策略。你一秒钟按一次 F5,应该也一样会被封禁
|
7
jin6220 OP @Va1n3R 现在改成频率一秒请求下那个动态加载出来的数字的真实地址。算快吗?
但是那个网页的数字一秒钟要变化 1 到 3 次,是不是因为爬虫伪装的浏览器请求的的频率跟原装的不一致导致的。 |
8
jin6220 OP 动态加载网页 ,浏览器没刷新
然后 f12 浏览器在不停的发送间隔时间不等的数字请求 反而不被禁,但是浏览器为什么会发送间隔时间随机的请求呢?难道是因为对方服务器等这个数字变化了再给浏览器发送的数据? 是不是因为这个模拟浏览器请求频率跟这个间隔时间频率不一定导致被对方发现的。 |
9
imn1 2017-10-17 13:32:01 +08:00
10060 超时是 socket 层面错误,并不是 web service 作出“对抗”响应的,它更多是网络原因造成的
|
10
ericgui 2017-10-17 13:37:40 +08:00
@abcbuzhiming 所以终极方案还是 chrome 或者 selenium 了呗?
|
11
abcbuzhiming 2017-10-17 14:45:27 +08:00 1
@jin6220 很明显,这是 js 轮询,对方在 js 里肯定有某些算法识别的,你没对上就屏蔽你,你遇上了反爬虫而已
|
12
abcbuzhiming 2017-10-17 14:46:02 +08:00
@imn1 不需要 web service 层,写个延时脚本直接在反向代理那把你干了就行
|
13
abcbuzhiming 2017-10-17 15:01:18 +08:00
现在基本反爬虫已经是各大网站的标配了,
有兴趣的可以看看这里: https://zhuanlan.zhihu.com/data-factory 楼主很明显缺乏一些基本概念,还是不要尝试这种关键数据,我说个很简单的方法,如果你要求不高的话,对这个场景最合适的做法是:自己写油猴脚本配合 chrome 抓取,保证没问题;或者上无头浏览器;研究 js 是不归路,不是对 js 造诣很深的人,都不建议去整,混淆就能玩死你,上个 eval 就能让你欲仙欲死,等你好不容易研究出来了人家改个方式你又完蛋,js 反反爬虫是逆向破解,最大的好处是你的 js 水平会曾指数级上升 |
14
jin6220 OP @abcbuzhiming 嗯 谢谢 这就去看看
|