我有一个脚本从网站上提取一些文字,我想知道如果结果不是我想要的话如何重新检查网站,然后当它返回我想要的或最多3次尝试时,然后继续脚本的其余部分?
例如 - 原始脚本;
Foo -> Bar
......其余的剧本......
正如您所看到的,上面的脚本从网站中提取了一段文本,那么如果'textIwant'不是我想要的,我该如何循环回'data1'?
所以最终脚本会做类似下面的事情,但我不确定正确的'if'语句;
url1 = "xxx.autotrader.com"
data1 = requests.get(url1)
searchKey = 'Toyota'
searchEndKey = '='
textIwant = data1.text[data1.text.find(searchKey)+len(searchKey):data1.text.find(searchEndKey,data1.text.find(searchKey)+len(searchKey)+1)]
......其余的剧本......
谢谢
答案 0 :(得分:0)
我建议看一下图书馆"重试",它提供了漂亮的装饰师来做你想做的事:https://pypi.python.org/pypi/retrying
您所要做的就是在函数中包装要重试的代码,并在函数上添加@retry装饰器。
或者,您也可以执行以下操作:
import requests
import time
def check_website():
url1 = "xxx.autotrader.com"
data1 = requests.get(url1)
searchKey = 'Toyota'
searchEndKey = '='
checked_times = 0
textIwant = data1.text[data1.text.find(searchKey)+len(searchKey):data1.text.find(searchEndKey,data1.text.find(searchKey)+len(searchKey)+1)]
checked_times += 1
while(checked_times < 3 and textIwant != 12345):
data1 = requests.get(url1)
textIwant = data1.text[data1.text.find(searchKey)+len(searchKey):data1.text.find(searchEndKey,data1.text.find(searchKey)+len(searchKey)+1)]
checked_times +=1
time.sleep(5)
return (textIwant == 12345)
has_found = check_website()
if(has_found):
# Do stuff ...
pass
正如@coldspeed所提到的,我建议在每次尝试之前稍等一下,因为网站每次尝试之间都不会更新。上面的代码在每次尝试之间等待5秒钟。