繁体   English   中英

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM