找到html元素bs4的孩子的最快方法

Posted

技术标签:

【中文标题】找到html元素bs4的孩子的最快方法【英文标题】:quickest way to find a child of html element bs4 【发布时间】:2019-07-02 18:48:03 【问题描述】:

我有一些具有以下结构的 html

<div class="article">
    <h1 class="header">Birth Date between 1919-01-01 and 2019-01-01, Oscar-Winning, Oscar-Nominated, Males (Sorted by Popularity Ascending) </h1>
    <br class="clear"/>
    <div class="desc">
        <span>1-100 of 716 names.</span> // I WANT THIS ELEMENT
        <span class="ghost">|</span> <a class="lister-page-next next-page" href="/search/name?birth_date=1919-01-01,2019-01-01&amp;groups=oscar_winner,oscar_nominee&amp;gender=male&amp;count=100&amp;start=101&amp;ref_=rlm">Next »</a>
    </div>
    <br class="clear"/>
</div>

现在我正在尝试使用 bs4 从这个 html 中获取特定元素。我试着做:

webSoup = BeautifulSoup(html, 'html.parser')
nextUrl = webSoup.findChildren()[2][0]

但这给了我以下错误:

返回 self.attrs[key] 关键错误:0

所以,总结一下我的问题: 如何使用 bs4 从 html 文档中获取特定索引处的特定子项?

【问题讨论】:

【参考方案1】:

如果你想要第一个匹配 span 跟随类 desc 那么你可以使用 css child combinator 将父类与子元素标签配对:

webSoup.select_one('.desc > span')

你也可以选择指定父级必须是div

div.desc > span

如果有多个匹配项,则使用webSoup.select,然后索引到返回的列表中。


你可以使用:

nextUrl = webSoup.findChildren()[3].findChildren()[0]
print(nextUrl)

【讨论】:

有没有办法使用 parent[0][2][3] 等?或等效的? 太棒了!正是我想要的!

以上是关于找到html元素bs4的孩子的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

找到包含 200000+ 个元素的 2 个数组元素的最小乘积的最快方法

父子兄弟节点查找方法

CSS第一个孩子悬停在一个元素上

如何在ios中找到元素的子元素?

查找范围内元素数量的最快方法

我的if语句在bs4标签元素中查找失败有什么理由吗?