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