[英]How to find element based on text ignore child tags in beautifulsoup
[英]Beautifulsoup select an element based on second last child
我正在尝试从面包屑部分中选择倒数第二个孩子。
<div class="breadcrumbs">
<span><a href="/">Home</a></span>
<i class="arrow"></i>
<span><a href="/list1/">List Name 1</a></span>
<i class="arrow"></i>
<span><a href="/list2/">List Name 2</a></span>
<i class="arrow"></i>
<span>List Name 3</span>
</div>
我在 BS4 python 中编写代码来打印倒数第二个要显示的子数据(列表名称 2 )
r = requests.get(link)
soup = BeautifulSoup(r.content, 'lxml')
listname = soup.select_one('.breadcrumbs span:nth-last-child(2) a').text
print(listname)
但它给出了错误:
AttributeError: 'NoneType' 对象没有属性 'text'
有时页面有 2 个面包屑,有时有 3 个。这就是为什么我只需要第二个姓氏。
您可以尝试选择面包屑中的所有<a>
并使用[-1]
索引:
from bs4 import BeautifulSoup
html_code = """\
<div class="breadcrumbs">
<span><a href="/">Home</a></span>
<i class="arrow"></i>
<span><a href="/list1/">List Name 1</a></span>
<i class="arrow"></i>
<span><a href="/list2/">List Name 2</a></span>
<i class="arrow"></i>
<span>List Name 3</span>
</div>"""
soup = BeautifulSoup(html_code, "html.parser")
print(soup.select(".breadcrumbs a")[-1].text)
印刷:
List Name 2
需要注意的是:nth-last-child(2)
不起作用的原因是你想要的span
元素不是倒数第二个,而是倒数第三个孩子。 为了获得倒数第二个span
,您必须将:nth-last-child
检查限制为仅spans
:
from bs4 import BeautifulSoup
TEXT = """
<div class="breadcrumbs">
<span><a href="/">Home</a></span>
<i class="arrow"></i>
<span><a href="/list1/">List Name 1</a></span>
<i class="arrow"></i>
<span><a href="/list2/">List Name 2</a></span>
<i class="arrow"></i>
<span>List Name 3</span>
</div>
"""
soup = BeautifulSoup(TEXT, "html.parser")
listname = soup.select_one('.breadcrumbs > :nth-last-child(2 of span) a').text
print(listname)
印刷
List Name 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.