[英]Trouble handling list index error
只要我從打印語句中排除電話號碼,我編寫的用於從黃頁解析名稱,地址和電話號碼的腳本就可以正常工作。 如果我嘗試打印其中三個,則會拋出錯誤,顯示“列表索引超出范圍”。 我自己找不到補救措施。 到目前為止,這是我嘗試過的。
import requests
from bs4 import BeautifulSoup
url=requests.get("https://www.yellowpages.com/search?search_terms=Coffee%20Shops&geo_location_terms=San%20Francisco%2C%20CA&page=1")
soup=BeautifulSoup(url.text,'lxml')
for item in soup.findAll(class_="info"):
name=item.findAll(class_="business-name")[0].text
address=item.findAll(class_="adr")[0].text
# phone=item.findAll(class_="phones")[0].text
# print(name,phone,address)
print(name,address)
亞當爵士的鏈接:“ https://www.dropbox.com/s/pt9yk6y5zu9r0ag/For%20sir%20adam.txt?dl=0 ”
選擇name
, phone
和address
,最好使用find
僅返回第一個匹配項的find
而不是findAll
返回所有匹配項的列表。
關於您的問題, soup.findAll(class_="info")
的第一項沒有'phones'標記,因此item.findAll
返回一個空列表,當您嘗試選擇第一項時會出現錯誤。
您可以使用try -except或if-else塊來處理這種情況。 例如:
for item in soup.findAll(class_="info"):
name=item.find(class_="business-name").text
address=item.find(class_="adr").text
phone=item.find(class_="phones").text if item.find(class_="phones") else None
print(name,phone,address)
或者,如果您堅持使用findAll
:
phone=item.findAll(class_="phones")[0].text if item.findAll(class_="phones") else None
使用功能:
def if_exist(item, item_class):
pro=item.find(class_=item_class)
if pro:
return pro.text
return ""
范例:
phone=if_exist(item, "phones")
import requests
from bs4 import BeautifulSoup
url=requests.get("https://www.yellowpages.com/search?search_terms=Coffee%20Shops&geo_location_terms=San%20Francisco%2C%20CA&page=1")
soup=BeautifulSoup(url.text,'lxml')
if __name__ == '__main__':
for item in soup.findAll(class_="info"):
name=item.findAll(class_="business-name")[0].text
address = item.findAll(class_="adr")[0].text if len(item.findAll(class_="adr")) else 'No Address'
phone = item.findAll(class_="phones")[0].text if len(item.findAll(class_="phones")) else 'No Phones'
print(name,phone,address)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.