我有一堆链接,我在每个链接上执行特定的功能,该功能大约需要25秒,我使用selenium打开每个链接并获取其页面源,然后执行我的功能,但是无论何时我编译了程序并取消了编译,我将不得不重新开始。
注意:我从不同的网站站点地图获得links
。
是否可以保存进度并在以后继续进行?
答案 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天(或您的条件如何)未处理的链接。
步骤:
处理该链接,然后在链接旁边写上日期/时间戳记,例如
http://www.google.com,1/25/2019 12:00PM
现在,无论何时您取消运行,该过程都会从您上次中断的地方开始。
注意:仅写出日期可能就足够了。这取决于您要多久刷新一次列表(每小时等),或者是否想要那么多的细节。
答案 2 :(得分:-1)
您应该将链接保存在文本文件中。您还应该将索引号保存在另一个文本文件中,可能以0初始化。
然后,您可以在代码中使用类似以下内容的链接进行循环:
用于链接中的链接[index_number:]
在每个循环结束时,将索引号添加到包含索引号的文本文件中。这将帮助您从上次中断的地方继续。