簡體   English   中英

處理列表索引錯誤

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

選擇namephoneaddress ,最好使用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.

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