我正在使用請求庫處理 url。所以我可以使用 get 方法檢查 URL 是否正常作業。該腳本適用于其余 URL,但對于一個 url,它花費了很多時間,然后出現此錯誤:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='macromedia.com', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x000001E8ACACF040>: Failed to establish a new connection: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond'))
現在我只想在超時發生時跳過 url。我嘗試了繼續 傳遞 ,以便以某種方式前進,但仍然失敗,下面是代碼:
import time
import requests
import bs4
from Base_Class import *
import threading
class Checking_Valid_URL:
def __init__(self):
self.https = 0
self.http = 0
#database connection
#print(urls)
self.url_protocols = ['http://', 'https://']
#database connection
def Checking_for_http_https_content_status(self):
for url in self.urls:
for url_protocol in self.url_protocols:
try:
time.sleep(2)
full_https_url = url_protocol url[0]
res = requests.get(full_https_url, timeout=60)
soup = bs4.BeautifulSoup(res.text, 'html.parser')
elems = soup.select('body')
try:
if elems:
print(f'body found in {full_https_url}')
try:
if res.status_code == 200:
#database connection
if full_https_url.startswith('https'):
print('https:: ' full_https_url ' ' str(res.status_code))
try:
#database connection
self.https = 1
time.sleep(5)
except:
continue
elif full_https_url.startswith('http'):
print('https:: ' full_https_url ' ' str(res.status_code))
try:
#database connection
self.http = 1
time.sleep(5)
except:
continue
except:
continue
else:
print(f"No body in {full_https_url}")
continue
except:
print(f"No body in {full_https_url}")
continue
except requests.exceptions.Timeout:
print(f"Timeout on {full_https_url}, skipping")
continue
check = Checking_Valid_URL()
check.Checking_for_http_https_content_status()
基類只有資料庫創建和硒驅動程式。#database 連接資料來自資料庫,所以我洗掉了它,代碼行將超過太多。但它正在作業。
uj5u.com熱心網友回復:
您現在實際上是在遇到 Timeout 例外還是仍然是類 requests.exceptions.ConnectionError 的例外?(如果是后者,這將解釋為什么您當前的例外處理代碼不起作用)。
您應該同時捕獲 ConnectionError 和 Timeout 例外以及通用的全部捕獲。
對于初學者,只需嘗試
except requests.exceptions.RequestException as e:
# some sort of connection error
continue
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524392.html
上一篇:如何在MongoDB中找到物件陣列和集合之間的交集?
下一篇:字典中f字串內的引數以后不能更新
