Python上数据抓取的作业调度

时间:2015-02-27 19:48:28

标签: python web-scraping scheduler

我从某个网站抓取(提取)数据。数据包含我需要的两个值,即(网格)频率值时间

网站上的数据每秒都在更新。我想继续使用python将这些值(附加它们)保存到列表或元组中。为此,我尝试使用 schedule 库。以下作业计划命令每秒运行数据抓取功能(socket_freq)。

import schedule
schedule.every(1).seconds.do(socket_freq)

while True:
    schedule.run_pending()

我面临两个问题:

  1. 我不知道如何限制在选定的时间间隔内运行的时间表。例如,我想运行它5或10分钟。我该如何定义?我的意思是如何告诉计划在一段时间后停止。
  2. 如果我运行此代码并在几秒后停止它(使用break),那么我经常会得到多个条目,例如这里有一个结果,其中元组中的第一个list []引用时间值,第二个list []是频率值:
  3. 出:

    (['19:27:02','19:27:02','19:27:02','19:27:03','19:27:03','19:27:03','19:27:03','19:27:03','19:27:03','19:27:03','19:27:04','19:27:04','19:27:04', ...], 
    ['50.020','50.020','50.020','50.018','50.018','50.018','50.018','50.018','50.018','50.018','50.017','50.017','50.017'...])
    

    如您所见,虽然我使用了每1秒运行一次的计划,但多次输入(追加)时间变量。我实际上希望检索的是:

    出:

    (['19:27:02','19:27:03','19:27:04'],['50.020','50.018','50.017'])
    

    有人知道如何解决这些问题吗?

    谢谢!

    (我使用的是python 2.7.9)

1 个答案:

答案 0 :(得分:1)

好的,这就是我要解决这些问题的方法:

  1. 尝试在程序开始时获取时间戳,然后只需检查每次执行正在安排的代码时它是否工作得足够长。
  2. 使用time.sleep()让您的程序暂停一段时间。
  3. 检查下面的示例:

    opam show -f package,version $(opam list -a -s) \
     | sed -e '/ *package:/N; s/ *package: \([^\n]*\)\n *version: \([^\n]*\)/\1: \2/'
    

    欢迎所有重构