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

新手请教两个问题 限时输入和实时暂停

  •  
  •   hcwhan · 2015-09-28 12:09:44 +08:00 · 2493 次点击
    这是一个创建于 3139 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚看 python,在试着写爬虫,遇到两个问题请教下大家,谢谢了(python 3.5.0 64bit)

    1. 在获取用户输入时,设定一个时间,
    限时内,有输入为输入
    无输入则设定输入为一个默认值

    2.在一个下载 for 循环中,如何做到在 cmd 运行中想暂停就可以暂停
    谢谢
    21 条回复    2015-09-30 11:03:28 +08:00
    hcwhan
        1
    hcwhan  
    OP
       2015-09-28 12:11:38 +08:00
    我想的第二个问题解决办法就是 设定一个很短时间的 1 所用的获取输入
    iwannaflytomoon
        2
    iwannaflytomoon  
       2015-09-28 12:16:28 +08:00
    1) while True: , 内部计时, 有输入或者到时间后 break
    2) 发信号
    hcwhan
        3
    hcwhan  
    OP
       2015-09-28 12:20:23 +08:00
    @iwannaflytomoon
    1)输入函数不是会暂停函数,如何实现计时?
    hcwhan
        4
    hcwhan  
    OP
       2015-09-28 12:21:22 +08:00
    @iwannaflytomoon
    2)发信号 不懂什么意思啊 哭了 能说一下是那个函数吗?
    MrGba2z
        5
    MrGba2z  
       2015-09-28 12:23:13 +08:00 via iPhone
    iwannaflytomoon
        6
    iwannaflytomoon  
       2015-09-28 12:24:25 +08:00
    @hcwhan
    1) 其实我不太明白你第一个需求是什么意思,一个 spider 为啥需要用户输入?
    2) linux 的信号, 在 python 中 import signal, 不懂可以 google 一下
    hcwhan
        7
    hcwhan  
    OP
       2015-09-28 12:27:36 +08:00
    @iwannaflytomoon
    1)是用来确认是否对失败列表进行重试的,默认 2s 无输入重试
    2)谢谢
    hcwhan
        8
    hcwhan  
    OP
       2015-09-28 12:27:54 +08:00
    @MrGba2z 是这个 非常感谢
    iwannaflytomoon
        9
    iwannaflytomoon  
       2015-09-28 12:47:18 +08:00
    @hcwhan
    这种一般用配置文件就 ok 了, 或者你打个日志, 失败的可以来爬第二遍

    spider 一般都是多线程来抓取的, 一般不会设计成人机交互式的⊙﹏⊙b 汗
    cdxem713
        10
    cdxem713  
       2015-09-29 16:20:14 +08:00
    @hcwhan 额,你这个需求岂不是需要有个人实时监控这个爬虫了,而且还是不能开小差那种
    爬虫尽量做到自动化,不要过多的交互,@lwannaflytomoon 已经提到重试和 Log 。这种方式才是正常的。
    cdxem713
        11
    cdxem713  
       2015-09-29 16:22:04 +08:00
    @hcwhan 第二个需求可以通过将爬虫队列持久化实现,每次重启爬虫后检查一下之前存储的队列
    hcwhan
        12
    hcwhan  
    OP
       2015-09-30 08:01:19 +08:00
    @cdxem713 额 就是为了实现自动化 是默认重试的 想失败次数过多后给一个选择中断继续
    用多线程来做的
    hcwhan
        13
    hcwhan  
    OP
       2015-09-30 08:04:55 +08:00
    @cdxem713 现在写的是每次下载一个文件 用多线程下载这个文件
    准备改成多线程同时下载几个文件 每个文件同时用多线程下载
    hcwhan
        14
    hcwhan  
    OP
       2015-09-30 08:06:39 +08:00
    @cdxem713 问题是感觉多线程同时下载几个文件 log 就会有点混乱
    cdxem713
        15
    cdxem713  
       2015-09-30 08:27:59 +08:00
    @hcwhan 类似于下载器?多线程下载文件么?
    hcwhan
        16
    hcwhan  
    OP
       2015-09-30 08:48:42 +08:00
    cdxem713
        17
    cdxem713  
       2015-09-30 09:19:07 +08:00
    @hcwhan 可否用现成的下载器进行下载呢?爬虫专注做链接发现,程序复杂度可能会低一些。
    hcwhan
        18
    hcwhan  
    OP
       2015-09-30 09:37:14 +08:00
    @cdxem713 恩 小白 就用的 python3.5.0 自带 urllib
    hcwhan
        19
    hcwhan  
    OP
       2015-09-30 09:39:22 +08:00
    @cdxem713 只知道标准库 有什么网络方面的库值得推荐?
    cdxem713
        20
    cdxem713  
       2015-09-30 09:55:06 +08:00
    @hcwhan github 上面找一下?我也没学几天 Python 。
    我是觉得在爬虫里面还有实现多线程下载太复杂了,你单独开发多线程下载,用参数传进去启动都会好一些,而且调试也方便。
    hcwhan
        21
    hcwhan  
    OP
       2015-09-30 11:03:28 +08:00
    @cdxem713 恩 就是把多线程下载封装到一个函数里的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2274 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 04:04 · PVG 12:04 · LAX 21:04 · JFK 00:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.