我使用BeautifulSoup4从网页中提取了包含在多个HTML p标记内的数据。我已将所有提取的数据存储在列表中。但我想将每个提取的数据作为单独的列表元素用逗号分隔。
HTML内容结构:
<ul>
<li>
<p>
<span class="TextRun">
<span class="NormalTextrun"> Data 1 </span>
</span>
</p>
</li>
<li>
<p>
<span class="TextRun">
<span class="NormalTextrun"> Data 2 </span>
</span>
</p>
</li>
<li>
<p>
<span class="TextRun">
<span class="NormalTextrun"> Data 3 </span>
</span>
</p>
</li>
</ul>
提取代码:
for data in elem.find_all('span', class_="TextRun"):
data = ''.join([' '.join(item.text.split()) for item in elem.select(".NormalTextRun")])
data = data.replace(u'\xa0', '')
events_parsed_thisweek.append(data)
print (events_parsed_thisweek)
当前输出: [Data1Data2Data3]
预期产量: [Data1,Data2,Data3]
非常感谢任何帮助!
答案 0 :(得分:2)
data = [x.text.strip() for x in elem.find_all('span', {'class': 'NormalTextrun'})]
打印数据会为您提供:['Data 1', 'Data 2', 'Data 3']
答案 1 :(得分:1)
这应该可以解决您的问题
data = [x.text for x in elem.find_all('span', attrs={'class':'TextRun'})]
答案 2 :(得分:1)
这给出了正确的输出:
data = [ele.text for ele in soup.find_all('span', {'class':'NormalTextrun'})]
print(data)
输出:
[' Data 1 ', ' Data 2 ', ' Data 3 ']
答案 3 :(得分:1)
我认为@Sagun Shrestha的建议是有效的。更详细地处理它,如内部span
和额外的空格。也许你应该尝试:
data = [s.text.strip() for s in b.find_all('span', class_='NormalTextrun')]
print(data)
如果您特别希望字符串输出不带引号。你可以试试这个:
data = [s.text.strip() for s in b.find_all('span', class_='NormalTextrun')]
print('[', ', '.join(data), ']', sep='')
希望这就是你想要的。