gpt4 book ai didi

python-3.x - 为什么 find_all 找不到明显存在的 `div` 元素?

转载 作者:行者123 更新时间:2023-12-04 01:47:55 25 4
gpt4 key购买 nike

我想从使用 beautifulsoup 解析的网页中找到与 div 元素关联的文本。

print(searchResult)

<div id="results-from-CIDR"><a href="javascript:prefixContribsToggleAll();" id="prefixcontribs-tog">toggle all</a><span id="prefixcontribs-prog">Searching.</span> No changes were found for this wildcard/CIDR range.</div>

print(type(searchResult))

<class 'bs4.element.Tag'>

print(searchResult.find_all("div"))

[]

print(searchResult.find_all("div", attrs={"id":"results-from-CIDR"}))

[]

那里显然有一个 div。为什么找不到?

最佳答案

如果您只是在寻找 div 的纯文本/可见文本,没有任何标记,您可以通过 searchResult.text 访问此文本属性。

Tag.find_all()方法仅搜索 Tag后代谁的name匹配给定的参数。所以在你的情况下,它返回一个空列表,因为没有后代 <divs> .示例的唯一后代 Tag你分享的是<a>标签,一个 <span> ,以及 NavigableString 的几个实例(bs4 对象用于表示 DOM 树中的可见文本)。如果你想使用 find_all()返回 <div>在您的示例中,您必须从父级调用它 Tag (或者更确切地说,来自目标 <div> 是其后代的任何元素)。

例如,如果您这样做:

from bs4 import BeautifulSoup as Soup
soup = Soup('<html><body><div id="results-from-CIDR"><a href="javascript:prefixContribsToggleAll();" id="prefixcontribs-tog">toggle all</a><span id="prefixcontribs-prog">Searching.</span> No changes were found for this wildcard/CIDR range.</div></body></html>')
soup.findall('div')

... 然后元素 被返回,因为它是soup 的后代(html 文档根目录)。

但同样,如果您只是想提取文本,请使用 .text属性,它给出给定标签及其任何后代的可见文本。

关于python-3.x - 为什么 find_all 找不到明显存在的 `div` 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54602734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com