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

[求助]爬虫假死

  •  
  •   devzero · 2017-07-28 19:12:58 +08:00 · 3369 次点击
    这是一个创建于 2677 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大概是这样的
    Python3.5,for 循环里面用 requests 下载页面
    大概 20 分钟后程序假死,表现出以下现象:

    按 Ctrl+C 无反应,只能结束掉进程
    无任何报错
    结束掉以后重新启动可正常运行
    电脑已经设置为禁止休眠
    多开运行时不同进程停止的时间不一样

    不排除网站限制以及网络原因造成的问题
    请问大家有没有什么解决问题的思路
    多谢
    golmic
        1
    golmic  
       2017-07-28 19:51:56 +08:00   ❤️ 1
    我感觉还是你电脑的 问题吧,你换台电脑试试。看你的描述的话看不出什么别的问题,最好还是贴出代码。
    tumbzzc
        2
    tumbzzc  
       2017-07-28 20:19:12 +08:00 via Android   ❤️ 1
    首先把代码优化了吧,for 循环里面用 requests
    takeoffyoung
        3
    takeoffyoung  
       2017-07-28 20:38:26 +08:00   ❤️ 1
    手动处理下 signal
    lxy
        4
    lxy  
       2017-07-28 20:55:58 +08:00   ❤️ 2
    设置 timeout
    trys1
        5
    trys1  
       2017-07-28 22:14:37 +08:00 via Android   ❤️ 1
    看到很多朋友都在问爬虫是一种什么动物,那么今天我在这里就给大家讲解一下吧。爬虫是一种存在于互联网的一种虫。就像计算机病毒是一种存在于计算机的病毒。要解决计算机病毒,必须给计算机吃药。那么同理,要消灭爬虫,必须给互联网的这种虫吃杀虫剂。爬虫有一个比较狡猾的特点,就是遇到未知的食物。会假装自己已经死了,就是俗称的假死。所以解决你这个问题的方法就是加大杀虫剂的剂量。
    cdwyd
        6
    cdwyd  
       2017-07-28 22:24:04 +08:00   ❤️ 1
    如果多线程可能是死锁
    还遇到过一种情况是同一个脚本在一台电脑上完全没问题,另一台就时不时假死,怀疑是 python 和系统的关系
    aaronzjw
        7
    aaronzjw  
       2017-07-28 22:46:20 +08:00
    换台电脑试试?
    fiht
        8
    fiht  
       2017-07-28 23:27:07 +08:00   ❤️ 2
    1. 你给 request 加个 timeout,官方文档里面讲如果在没有 timeout 的情况下 tcp 连接不断的话 request 会一直挂起(没记错的话是这么描述的)
    2. 打 log,看爬虫是请求哪条 URL 时候被挂起的,尽量复现漏洞
    3. 上面搞不定的话可以贴一小段代码上来,楼下讲可以给你解决
    RLib
        9
    RLib  
       2017-07-28 23:59:55 +08:00   ❤️ 1
    linux 还是 windows, 生成 dump 看调用堆栈
    devzero
        10
    devzero  
    OP
       2017-07-30 08:19:37 +08:00
    @RLib @fiht @aaronzjw @cdwyd @trys1 @lxy @takeoffyoung @tumbzzc @golmic
    感谢各位的回复,的确是 timeout 的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1013 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:56 · PVG 05:56 · LAX 13:56 · JFK 16:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.