簡體   English   中英

如何處理 Python 中的異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM