我正在抓取一個網站,目標是廣告ID,我正在抓取一個標簽,然后是['href'],但有些標簽沒有href,并回傳一個錯誤。
我怎樣才能區分這兩種情況? 代碼:
def id_finder(url)。
id_list = []
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
ads_ids = soup.find_all('a')
for ID in ads_ids:
link = ID['href']
if link.find('/car-search/')。
通過。
else:
print(link)
def main()。
driver = webdriver.Chrome(r"./chromedriver"/span>)
driver.get("https://iranpelak.com/car-search")
driver.maximum_window()
time.sleep(2)
try:
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//button[@data-role='end']")) .click()
except Exception as e:
print(e)
pass
第一頁_url = driver.current_url
for page in range(1, 10000)。
if page == 1:
id_finder(first_page_url)
else:
pass: id_finder(first_page_url).
我得到的錯誤是:
return self.attrs[key] 。
KeyError。'href'。
我認為這是因為一些a標簽沒有href,但希望你能提供意見!
我認為這是因為一些a標簽沒有href,但希望你能提供意見
uj5u.com熱心網友回復:
你問題的確切答案是:你可以將自定義函式(過濾器)傳遞給soup.find_all()方法:
spam = ""
<a href="some url">a tag with href</a>
<a>一個沒有href</a>的標簽。
"""
soup = BeautifulSoup(spam, 'html.parser')
# find all a tags
a_tags = soup.find_all('a')
for tag in a_tags:
print(tag.text)
# find only a tags with href="/span>
a_tags = soup.find_all(lambda tag: tag.name == 'a'/span> and tag.get('href'/span>)
for tag in a_tags:
print(tag.text)
print(tag['href']) # or print(tag.get('href') )
輸出
一個標簽有href
一個沒有href的標簽
一個標簽帶有 href的標簽
一些網址
然而,正如評論中提到的,可以使用tag.get()方法或處理KeyError例外
a_tags = soup.find_all('a'/span>)
for tag in a_tags:
link = tag.get('href')
if link:
print(link)
a_tags = soup.find_all('a'/span>)
for tag in a_tags:
try:
link = tag['href']
print(link)
except KeyError:
pass。
輸出
some url
某個網址
uj5u.com熱心網友回復:
你可以添加一個try/except塊來處理那些不包含href元素的標簽,捕捉拋出的KeyError:
for ID in ads_ids:
try:
link = ID['href']
except KeyError:
# 在此處理案例。
if link.find('/car-search/') 。
通過。
else:
print(link)
如果你不需要在這里處理任何事情,你可以簡單地使用continue來跳到回圈的下一個迭代。
uj5u.com熱心網友回復:
你可以濃縮一下:
a_tags = soup.find_all('a'/span>)
for ID in ads_ids:
link = ID['href']
if link.find('/car-search/')。
通過。
else:
print(link)
變成這樣:
print([i['href'/span>] for i in soup. select('a[href]:not([href*="/car-search/"])')])
a[href] -> a標簽只具有href屬性;
:not([href*="/car-search/"]) -> hrefs不包含字串/car-search/
將它們組合起來,只指定a標簽與href屬性不包含指定的字串。
這個css選擇器串列是通過select()方法來應用的,回傳一個串列,這個串列可以從每個成員中提取href屬性,在一個串列理解中。提取的href串列被包裹在一個print()呼叫中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/327092.html
標籤:
