gpt4 book ai didi

python - 使用 lxml 迭代元素和子元素

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

这个是合法的 lxml大师们。我有一个网络抓取应用程序,我想在其中迭代多个 div.content网站上的(内容是类)标签。一旦进入 div.content 标签,我想看看是否有 <a> <h3> 的子标签元素。这看起来相对简单,只需尝试使用 XPath 创建一个列表即可。来自 div.cont 标签,即

linkList = tree.xpath('div[contains(@class,"cont")]//h3//a')

问题是,我想创建一个 tuple包含来自 div.content 框的链接以及来自同一 div.content 框的段落元素的文本。显然,我可以迭代整个文档并存储所有段落文本以及所有链接,但我没有任何真正的方法将适当的段落与 <a> 相匹配。标签。

lxml 的 Element.iter()函数几乎可以通过迭代所有 div.cont 来实现这一点元素,忽略那些没有 <a> 的元素标签,并将 paragraph/a 配对组合,但不幸的是,似乎没有任何选项可以使用该方法迭代类名,只有标签名称。

编辑:这是我想要解析的 HTML 的一个极其精简的版本:

<body>
<div class="cont">
<h1>Random Text</h1>
<p>The text I want to obtain</p>
<h3><a href="somelink">The link I want to obtain</a></h3>
</div>
</body>

我想要使用许多像这样的 div.cont - 其中大多数的元素比这多得多,但这只是一个草图,让您了解我正在使用的内容。

最佳答案

您可以使用不太具体的 XPath 表达式:

for matchingdiv in tree.xpath('div[contains(@class,"cont")]'):
# skip those without a h3 > a setup.
link = matchingdiv.xpath('.//h3//a')
if not link:
continue

# grab the `p` text and of course the link.

您可以扩展它(雄心勃勃)并选择 h3 > a 标记,然后转到 div.cont 祖先(基于 XPath query with descendant and descendant text() predicates ):

for matchingdiv in tree.xpath('.//h3//a/ancestor::*[self::div[contains(@class,"cont")]]'):
# no need to skip anymore, this is a div.cont with h3 and a contained
link = matchingdiv.xpath('.//h3//a')

# grab the `p` text and of course the link

但是由于您无论如何都需要扫描该链接,因此实际上不会为您购买任何东西。

关于python - 使用 lxml 迭代元素和子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571827/

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