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

照着浏览器的 request header 信息抄的 为什么爬虫运行一段时间还是 WinError 10060

  •  
  •   jin6220 · 2017-10-17 10:46:42 +08:00 · 6428 次点击
    这是一个创建于 2587 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很简单的一个爬虫 爬取一个不停变动的数字 显示在屏幕上
    请问大家
    同一个网址 为什么照着浏览器的 request header 信息抄的 复制到 headers 里
    但是爬虫运行一段时间之后还是 10060:[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。',))
    用的 requestsf
    14 条回复    2017-10-17 17:52:06 +08:00
    abcbuzhiming
        1
    abcbuzhiming  
       2017-10-17 11:02:00 +08:00
    很简单,不是你把 head 伪装成浏览器,对面就会真傻逼的觉得你就是真人的,识别爬虫的机制多的很,最简单的一种,楼主你的机器人有伪装请求频率吗,人类可做不到机器那么有规律的行为。
    再狠一点的,js 里做点手脚,你的爬虫不执行 js,也会被发现
    imn1
        2
    imn1  
       2017-10-17 11:13:49 +08:00
    10060 是超时,跟 header 没关系
    jin6220
        3
    jin6220  
    OP
       2017-10-17 12:32:02 +08:00
    @imn1 我把 timeout 设置成 60 秒了 但是要获取的那个数字几乎每秒都在变动 我估计对方发现这个请求不是真人 故不选择响应了。。。
    jin6220
        4
    jin6220  
    OP
       2017-10-17 12:38:55 +08:00
    @abcbuzhiming
    有啊 time.sleep(0.2) 我把这个数字改大一点试一下吧 。
    因为要爬取的数字类似股票价格变化,每秒都在 变化好几次,原网页的数字应该是动态加载出来的,我按 f12 获取那个真实的地址了然后 request 请求了网址。我不知道用 requsts 直接请求真实地址的方式跟浏览器动态加载原网页出来的效果,对方能不能识别出来。
    Va1n3R
        5
    Va1n3R  
       2017-10-17 12:42:33 +08:00
    一般都有反爬虫策略吧?比如你的频率太快了。建议上代理,或者用分布式的爬虫。
    metorm
        6
    metorm  
       2017-10-17 12:45:47 +08:00 via Android
    应该是反爬虫策略。你一秒钟按一次 F5,应该也一样会被封禁
    jin6220
        7
    jin6220  
    OP
       2017-10-17 12:49:05 +08:00
    @Va1n3R 现在改成频率一秒请求下那个动态加载出来的数字的真实地址。算快吗?
    但是那个网页的数字一秒钟要变化 1 到 3 次,是不是因为爬虫伪装的浏览器请求的的频率跟原装的不一致导致的。
    jin6220
        8
    jin6220  
    OP
       2017-10-17 12:57:06 +08:00
    动态加载网页 ,浏览器没刷新
    然后 f12 浏览器在不停的发送间隔时间不等的数字请求 反而不被禁,但是浏览器为什么会发送间隔时间随机的请求呢?难道是因为对方服务器等这个数字变化了再给浏览器发送的数据?
    是不是因为这个模拟浏览器请求频率跟这个间隔时间频率不一定导致被对方发现的。
    imn1
        9
    imn1  
       2017-10-17 13:32:01 +08:00
    10060 超时是 socket 层面错误,并不是 web service 作出“对抗”响应的,它更多是网络原因造成的
    ericgui
        10
    ericgui  
       2017-10-17 13:37:40 +08:00
    @abcbuzhiming 所以终极方案还是 chrome 或者 selenium 了呗?
    abcbuzhiming
        11
    abcbuzhiming  
       2017-10-17 14:45:27 +08:00   ❤️ 1
    @jin6220 很明显,这是 js 轮询,对方在 js 里肯定有某些算法识别的,你没对上就屏蔽你,你遇上了反爬虫而已
    abcbuzhiming
        12
    abcbuzhiming  
       2017-10-17 14:46:02 +08:00
    @imn1 不需要 web service 层,写个延时脚本直接在反向代理那把你干了就行
    abcbuzhiming
        13
    abcbuzhiming  
       2017-10-17 15:01:18 +08:00
    现在基本反爬虫已经是各大网站的标配了,
    有兴趣的可以看看这里:
    https://zhuanlan.zhihu.com/data-factory
    楼主很明显缺乏一些基本概念,还是不要尝试这种关键数据,我说个很简单的方法,如果你要求不高的话,对这个场景最合适的做法是:自己写油猴脚本配合 chrome 抓取,保证没问题;或者上无头浏览器;研究 js 是不归路,不是对 js 造诣很深的人,都不建议去整,混淆就能玩死你,上个 eval 就能让你欲仙欲死,等你好不容易研究出来了人家改个方式你又完蛋,js 反反爬虫是逆向破解,最大的好处是你的 js 水平会曾指数级上升
    jin6220
        14
    jin6220  
    OP
       2017-10-17 17:52:06 +08:00
    @abcbuzhiming 嗯 谢谢 这就去看看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   980 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:48 · PVG 06:48 · LAX 14:48 · JFK 17:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.