Python:将列表列表中的 bs4.element.ResultSet 个元素更改为文本

Python: Changing bs4.element.ResultSet elements in list of lists to text

大家好,我使用 beautifulsoup 和 find_all 从网站上提取了一些 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) 中的每个列表(专长)。第二个查看每个内部列表 (feats) 中的每个元素 (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']]