iT邦幫忙

0

python迴圈中的url如何重試

  • 分享至 

  • xImage

for i in listurl:
try:
url=i
html = requests.get(url,timeout=10)
print(html.text)
except:
print('超時')
這樣雖然能夠跳過錯誤繼續執行
但是被跳過的url就沒取得資料了
我要如何取得被跳過的url的資料呢

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
echochio
iT邦高手 1 級 ‧ 2020-04-03 09:21:52
最佳解答

您打算重試幾次 ?
程式如下 :

for i in listurl:
    attempts = 0
    while (attempts < 3) :
        try:
            html = requests.get(i,timeout=10)
            print(html.text)
            attempts = 3
        except:
            attempts += 1
            print('超時 %d 次 ' % attempts)

類式的方法可以自己改不一定要用 while loop

s4028600 iT邦新手 5 級 ‧ 2020-04-17 22:31:58 檢舉

喔喔
我倒是沒想過用while
我一直以為他只能無限迴圈
我會試試
感謝

1
listennn08
iT邦高手 5 級 ‧ 2020-04-02 23:05:30

這樣其實沒有別的用意可以不用設 timeout

for i in listurl:
    try:
        html = requests.get(i,timeout=10)
        print(html.text)
    except:
        print('超時')
        html = requests.get(i)
        print(html.text)
看更多先前的回應...收起先前的回應...
s4028600 iT邦新手 5 級 ‧ 2020-04-03 05:40:15 檢舉

原來如此
再試一次的意思嗎
這樣就可以解決一些問題了
因為timeout只是我臨時想到一個常見的錯誤

如果except部分還是出現錯誤
有辦法重試到正確嗎

如果except部分還是出現錯誤
有辦法重試到正確嗎

那就是在 except 的時候把錯誤的 url 記下來持續讓他試
但這個有可能造成無限迴圈
如果錯誤都沒有被處理的話

def restart(arr):
  while arr:
    try:
      html = requests.get(arr[0])
    except:
      # do except...
    else:
      print(html.text)
      arr.pop(0)
            
errorUrl = []
for i in listurl:
    try:
        html = requests.get(i,timeout=10)
        print(html.text)
    except:
        print('超時')
        errorUrl.append(i)
restart(errorUrl)
s4028600 iT邦新手 5 級 ‧ 2020-04-03 09:30:24 檢舉

還是要用到def啊...
了解了
感謝

你也可以不用def
就存到 list

while errorUrl:
    try:
        html = requests.get(errorUrl[0])
    except:
        # do except...
    else:
        print(html.text)
        errorUrl.pop(0)

我要發表回答

立即登入回答