首页 > 解决方案 > 使用漂亮的汤和 python 从无序列表中抓取文本

问题描述

我正在使用 python 和美丽的汤从网页中抓取信息。我对以下源代码部分感兴趣:

<ul class="breadcrumb">
<li><a href="/" title="Return to the home page">Home</a><span 
class="sprite icon-delimiter"></span></li>
<li><a href="/VehicleSearch/Search/Mini" title="View our range of Mini 
vehicles">Mini</a><span class="sprite icon-delimiter"></span></li>
<li class="active"><a href="/VehicleSearch/Search/Mini/Countryman" 
title="View our range of Mini Countryman">Countryman</a></li>
</ul>

我想提取无序列表项目符号的文本,即“Home”、“Mini”和“Countryman”(也是所有链接)。

到目前为止,我最接近的尝试是:

for ul in soup.findAll('ul', class_='breadcrumb'):
    print(ul.find('a').contents[0])

但这只找到了“主页”链接,而没有找到其他两个链接。请问如何找到所有三个链接文本?

标签: pythonweb-scrapingbeautifulsoup

解决方案


为什么不使用 css 后代组合器选择器来检索类中的 li 标签?

from bs4 import BeautifulSoup as bs

html ='''
<ul class="breadcrumb">
<li><a href="/" title="Return to the home page">Home</a><span 
class="sprite icon-delimiter"></span></li>
<li><a href="/VehicleSearch/Search/Mini" title="View our range of Mini 
vehicles">Mini</a><span class="sprite icon-delimiter"></span></li>
<li class="active"><a href="/VehicleSearch/Search/Mini/Countryman" 
title="View our range of Mini Countryman">Countryman</a></li>
</ul>
'''
soup = bs(html, 'lxml')
items = [item.text for item in soup.select('.breadcrumb li')]
print(items)

推荐阅读