Python:更改bs4.element.Result将列表中的元素设置为文本



大家好,我使用beautifulsoup和find_all从一个webiste中提取了一些html元素。因此,我收到了bs4.elements.ResultSet的列表,如下所示:

[[<li class="WlSsj w9uVi">neu</li>],
[<li class="WlSsj w9uVi">neu</li>],
[<li class="WlSsj w9uVi">neu</li>, <li class="WlSsj">Terrasse</li>],
[<li class="WlSsj w9uVi">neu</li>,
<li class="WlSsj">Terrasse</li>,
<li class="WlSsj">Parkplatz</li>]

我现在想检索bs4元素中的文本,并保持列表的相同格式。我一直在尝试创建两个循环。

fet = []
for feat in features_bs:
for fets in feat:
fet.append(fets.text)
features.append(fet)

第一个循环查看原始列表(features_bs(中的每个列表(壮举(。第二个查看每个内部列表(壮举(中的每个元素(fets(,然后将元素更改为文本。我现在想把文本重新附加到一个空列表(fet(中,但我想保持与以前相同的格式,列表中有列表。目前,我只得到第一个循环中的文本,如下所示:

['neu',
'neu',
'neu',
'Terrasse',
'neu',
'Terrasse',
'Parkplatz']

然而,我希望输出是:

[['neu'],
['neu'],
['neu','Terrase'],
['neu'],
['Terrase']
['Parkplatz']]

感谢您提前提供的帮助。

接近目标,但缺少一个临时列表:

fet = []
for feat in features_bs:
el = []
for fets in feat:
el.append(fets.text)
fet.append(el)
fet

输出:

[['neu'], ['neu'], ['neu', 'Terrasse'], ['neu'], ['Terrasse'], ['Parkplatz']]

您也可以精简流程,并将其直接转换为您期望的格式:

from bs4 import BeautifulSoup
html = '''
<ul>
<li class="WlSsj w9uVi">neu</li>
</ul>
<ul>
<li class="WlSsj w9uVi">neu</li>
</ul>
<ul>
<li class="WlSsj w9uVi">neu</li>, <li class="WlSsj">Terrasse</li>
</ul>
<ul>
<li class="WlSsj w9uVi">neu</li>
</ul>
<ul>
<li class="WlSsj">Terrasse</li>
</ul>
<ul>
<li class="WlSsj">Parkplatz</li>
</ul>
'''
soup = BeautifulSoup(html)
data = []
for ul in soup.find_all('ul'):
el = []
for e in ul.find_all('li'):
el.append(e)
data.append(el)
data

输出:

[['neu'], ['neu'], ['neu', 'Terrasse'], ['neu'], ['Terrasse'], ['Parkplatz']]

最新更新