![](/img/trans.png)
[英]Beautiful Soup: 'ResultSet' object has no attribute 'find_all'?
[英]find_all on span tag in Beautiful Soup yields AttributeError: ResultSet object has no attribute 'get_text'
警告:这只是我第二次尝试 Python 代码,所以我可能会犯一些错误,这会给专业人士带来困扰:
我想从soup_r的结果集中使用“addressLocality”获取城市列表:
import requests
from bs4 import BeautifulSoup
URL = 'https://www.tjhughes.co.uk/map'
page = requests.get(URL, verify=False)
soup_r = BeautifulSoup(page.text, 'html.parser')
这是我只想要城市名称的结果类型(在这种情况下 = 布拉德福德)
single_span = soup_r.find('span',itemprop = 'addressLocality').get_text()
我希望能够以与 single_span 相同的格式返回完整的结果列表(即通过隔离城市名称),但以下代码给了我错误“AttributeError: ResultSet object has no attribute 'get_text'”
spans_fail = soup_r.find_all('span',itemprop = 'addressLocality').get_text()
我能得到的最近的方法是删除 get_text():
spans = soup_r.find_all('span',itemprop = 'addressLocality')
...从而以一束形式返回结果:
[<span itemprop="addressLocality">Bradford</span>, <span itemprop="addressLocality">Birkenhead</span>, <span itemprop="addressLocality">Bootle</span>, <span itemprop="addressLocality">Bury</span>,
...
<span itemprop="addressLocality">Sheffield</span>, <span itemprop="addressLocality">St Helens</span>, <span itemprop="addressLocality">Widnes</span>]
假设这是我能做的最好的事情,当我尝试重新安排结果时,我仍然束手无策。
例如,这只是返回 Bradford 52 次,这让我感到困惑,因为原始列表中只有 26 个城市,所以我不知道我是如何加倍的,更不用说如何访问其他 25 个了:
cities = []
for check in soup:
check = soup.find('span',itemprop = 'addressLocality').text
cities.append(check)
我一直在寻找一个优雅简单的解决方案,我很感激我可能需要一个解决方法,但我看不出还有什么方法可以解决这个问题,因此感谢任何输入。
当您处理单个元素的列表时,有时您必须进行字符串切割。
spans = soup_r.find_all('span',itemprop = 'addressLocality')
# [<span itemprop="addressLocality">Bradford</span>, <span
cities = []
for span in spans:
left_angle=span.find('>'+1)
sec_rangle=spane.find('<',1)
city=span[left_angle:sec_rangle]
print(city)
cities.append(city)
print(cities)
您可以使用列表理解来获取您的城市列表。
例如:
import requests
from bs4 import BeautifulSoup
URL = 'https://www.tjhughes.co.uk/map'
page = requests.get(URL, verify=False)
soup_r = BeautifulSoup(page.text, 'html.parser')
cities = [span.get_text() for span in soup_r.select('span[itemprop="addressLocality"]')]
print(cities)
印刷:
['Bradford', 'Birkenhead', 'Bootle', 'Bury', 'Chelmsford', 'Chesterfield', 'Glasgow', 'Cumbernauld', 'London', 'Coventry', 'Dundee', 'Durham', 'East Kilbride', 'Glasgow', 'Harlow', 'Hartlepool', 'Liverpool', 'Maidstone', 'Middlesbrough', 'Newcastle upon Tyne', 'Nuneaton', 'Oldham', 'Preston', 'Sheffield', 'St Helens', 'Widnes']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.