继续我离开Python的地方

时间:2019-01-25 17:46:54

标签: python list selenium

我有一堆链接,我在每个链接上执行特定的功能,该功能大约需要25秒,我使用selenium打开每个链接并获取其页面源,然后执行我的功能,但是无论何时我编译了程序并取消了编译,我将不得不重新开始。

注意:我从不同的网站站点地图获得links

是否可以保存进度并在以后继续进行?

3 个答案:

答案 0 :(得分:1)

此代码将起作用。我假设您已经具有获取链接的功能。我刚刚使用了一个虚拟的_get_links。 每次成功运行后,您将必须删除links文件的内容,并且需要将0放入index文件中。

import time

def _get_links():
    return ["a", "b", "c"]

def _get_links_from_file():
    with open("links") as file:
        return file.read().split(",")


def _do_something(link):
    print(link)
    time.sleep(30)

def _save_links_to_file(links):
    with open("links", "w") as file:
        file.write(",".join(links))
    print("links saved")

def _save_index_to_file(index):
    with open("index", "w") as file:
        file.write(str(index))
    print("index saved")

def _get_index_from_file():
    with open("index",) as file:
        return int(file.read().strip())


def process_links():
    links=_get_links_from_file()
    if len(links) == 0:
        links = _get_links()
        _save_links_to_file(links)
    else:
        links = _get_links_from_file()[_get_index_from_file():]


    for index, link in enumerate(links):
        _do_something(link)
        _save_index_to_file(index+1)

if __name__ == '__main__':
    process_links()

答案 1 :(得分:0)

我建议您写出文件的链接以及上次处理文件的日期/时间戳。当您编写指向文件的链接时,您将要确保不要两次编写相同的链接。处理完链接后,您还需要为链接添加日期/时间戳。

有了此列表后,启动脚本后,您将读取整个列表并开始处理X天(或您的条件如何)未处理的链接。

步骤:

  1. 加载链接文件
  2. 从站点地图中删除链接,与文件中的现有链接进行比较,将任何新链接写入文件中
  3. 找到X天未处理的第一个链接
  4. 处理该链接,然后在链接旁边写上日期/时间戳记,例如

    http://www.google.com,1/25/2019 12:00PM
    
  5. 返回步骤3

现在,无论何时您取消运行,该过程都会从您上次中断的地方开始。

注意:仅写出日期可能就足够了。这取决于您要多久刷新一次列表(每小时等),或者是否想要那么多的细节。

答案 2 :(得分:-1)

您应该将链接保存在文本文件中。您还应该将索引号保存在另一个文本文件中,可能以0初始化。

然后,您可以在代码中使用类似以下内容的链接进行循环:

用于链接中的链接[index_number:]

在每个循环结束时,将索引号添加到包含索引号的文本文件中。这将帮助您从上次中断的地方继续。