繁体   English   中英

Beautiful Soup 中 span 标签上的 find_all 产生 AttributeError:ResultSet 对象没有属性“get_text”

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM