[英]How do I handle exceptions in Python
這回答了我的問題,問題解決了。 你可以刪除這個帖子。
RETRIES = 10
id = None
session = requests.Session()
for attempt in range(1, RETRIES + 1):
response = session.get(url)
soup = BeautifulSoup(r.text, "lxml")
element = soup.find('a', class_="class", id=True)
if element is None:
print("Attempt {attempt}. Element not found".format(attempt=attempt))
continue
else:
id = element["id"]
break
print(id)
這回答了我的問題,問題解決了。 你可以刪除這個帖子。
您可以應用“跳前查看”( LBYL
)原則並檢查find()
的結果 - 如果未找到元素,它將返回None
。 然后,您可以將事物放入循環並在有值時退出,同時使用循環計數器限制來保護自己:
RETRIES = 10
id = None
session = requests.Session()
for attempt in range(1, RETRIES + 1):
response = session.get(url)
soup = BeautifulSoup(r.text, "lxml")
element = soup.find('a', class_="class", id=True)
if element is None:
print("Attempt {attempt}. Element not found".format(attempt=attempt))
continue
else:
id = element["id"]
break
print(id)
情侶筆記:
id=True
設置為僅查找存在id
元素的元素。 您也可以使用CSS 選擇器soup.select_one("a.class[id]")
Session()
有助於在多次向同一主機發出請求時提高性能。 在Session 對象中查看更多信息如果您只想再次發出相同的請求,則可以執行以下操作:
import requests
from bs4 import BeautifulSoup
def find_data(url):
found_data = False
while not found_data:
r = requests.get(url)
soup = BeautifulSoup(r.text, "lxml")
try:
id = soup.find('a', class_="class").get('id')
found_data = True
except:
pass
如果數據確實不存在,這會使您面臨無限循環的風險。 您可以這樣做以避免無限循環:
import requests
from bs4 import BeautifulSoup
def find_data(url, attempts_before_fail=3):
found_data = False
while not found_data:
r = requests.get(url)
soup = BeautifulSoup(r.text, "lxml")
try:
id = soup.find('a', class_="class").get('id')
found_data = True
except:
attempts_before_fail -= 1
if attempts_before_fail == 0:
raise ValueError("couldn't find data after all.")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.