簡體   English   中英

漂亮的湯代碼返回“AttributeError”

[英]Beautiful Soup code returning an “AttributeError”

我正在構建一個 webscraper,它返回寫在網站上的咖啡館的名稱,如下所示: <h2 class="venue-title" itemprop="name">Prior</h2>但是它返回此錯誤:

“ResultSet object 沒有屬性 '%s'。您可能將元素列表視為單個元素。當您打算調用 find() 時是否調用了 find_all()?” % key AttributeError: ResultSet object 沒有屬性“文本”。 您可能將元素列表視為單個元素。 當您打算調用 find() 時,您是否調用了 find_all()? 【0.699s完成】

這是代碼:

from bs4 import BeautifulSoup
import requests

url = 'https://www.broadsheet.com.au/melbourne/guides/best-cafes-thornbury'
response = requests.get(url, timeout=5)

soup_cafe_list = BeautifulSoup(response.content, "html.parser")
type(soup_cafe_list)

cafes = soup_cafe_list.findAll('h2', attrs_={"class":"venue-title"}).text
print(cafes)

我已經嘗試了很多方法來解決這個問題。 我覺得它與 findAll 參數有關: cafes = soup_cafe_list.findAll('h2', attrs_={"class":"venue-title"}).text因為當我將它作為cafes = soup_cafe_list.findAll('h2', class_="venue-title")相反,它的某種作品期望不會返回從 html 清除的項目,我認為.text應該這樣做?

我在回溯中注意到的另一件事是它可能指的是 BS4 的不同目錄? 這與它有什么關系嗎,我開始使用 Jupyter,現在在 Atom 上,但可能錯誤地安裝了 bs4:

文件“/Users/[xxxxxxxx]/Desktop/Coding/amvpscraper/webscraper.py”,第 10 行,cafes = soup_cafe_list.findAll('h2', attrs_={"class":"venue-title"}).text文件“/Users/[xxxxxxxx]/opt/anaconda3/lib/python3.7/site-packages/bs4/element.py”,第 2081 行,在getattr

不知道我是否做錯了什么......

該錯誤表明 findAll 方法的返回值是一個元素列表,並且沒有 text 屬性。 將結果保存在列表中(without.text 方法)並將 attrs_ 替換為 attrs:

cafes = soup_cafe_list.findAll('h2', attrs={"class":"venue-title"})

然后遍歷列表並獲取文本。 您可以通過列表理解來做到這一點:

cafes = [el.text for el in cafes]

編輯:列表推導簡化了 for 循環。 你也可以寫:

res_list = []
for el in cafes:
    res_list.append(el.text)

此外,您可以添加一些 try-except 子句或檢查循環中的有效文本字段以捕獲可能沒有文本的元素。

Output:

['Prior',
 'Rat the Cafe',
 'Ampersand Coffee and Food',
 'Umberto Espresso Bar',
 'Brother Alec',
 'Short Round',
 'Jerry Joy',
 'The Old Milk Bar',
 'Little Henri',
 'Northern Soul']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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