将列表项抓取为逗号分隔的值



我是网页抓取的新手,试图抓取一个无序的列表。我希望列表项目被刮成一个列表项目用逗号分隔。这是我要删除的列表。

<div class="spec-list attributes-modality">
<h5 class="spec-subcat">Modality</h5>
<div class="col-split-xs-1 col-split-md-1">
<ul class="attribute-list copy-small">
<li class="">Individuals</li>
<li class="">Family</li>
<li class="">Group</li>
</ul></div></div>

这是我的尝试:

modalitydiv = soup.find('div', class_='spec-list attributes-modality')
modality = modalitydiv.find('ul', class_='attribute-list copy-small').text.strip()

我的try只给了我一个逐行列表项的列表。

个人家庭

为什么这些不出现在同一行中,我如何将这些列表项刮入逗号分隔的列表中?有人能帮忙吗?

我得到以下输出:

from bs4 import BeautifulSoup

html_doc="""
<div class="spec-list attributes-modality">
<h5 class="spec-subcat">Modality</h5>
<div class="col-split-xs-1 col-split-md-1">
<ul class="attribute-list copy-small">
<li class="">Individuals</li>
<li class="">Family</li>
<li class="">Group</li>
</ul></div></div>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
p=', '.join([x.get_text(strip = True) for x in soup.select('ul.attribute-list.copy-small>li')])
print(p)

输出:

Individuals, Family, Group

发生了什么

您正在使用strip(),它只删除前导和尾随字符。

解决方案使用split()代替strip()将字符串拆分为列表:

modalitydiv = soup.find('div', class_='spec-list attributes-modality')
modality = modalitydiv.find('ul', class_='attribute-list copy-small').text.split()

输出
['Individuals', 'Family', 'Group']

最新更新