首页 > 解决方案 > 无法创建能够有条件地定位元素的 xpath

问题描述

我一直在尝试创建一个 xpath,它应该Yes在元素中定位前三个元素,直到元素中p的文本。我在以下脚本中使用的现有脚本定位了元素中的所有文本。但是,我找不到任何继续前进的想法。只需考虑我已经创建的一个占位符。Demarcationh1p

如何创建一个 xapth 以便能够Yesp元素中定位前三个而不是别的?

到目前为止我的尝试:

from lxml.html import fromstring

htmldoc="""
<li>
    <a>Nope</a>
    <a>Nope</a>
    <p>Yes</p>
    <p>Yes</p>
    <p>Yes</p>
    <h1>Demarcation</h1>
    <p>No</p>
    <p>No</p>
    <h1>Not this</h2>
    <p>No</p>
    <p>Not this</p>
</li>
"""
root = fromstring(htmldoc)
for item in root.xpath("//li/p"):
    print(item.text)

标签: pythonpython-3.xxpathweb-scrapinglxml

解决方案


尝试在下面选择在标题同级之前的段落"Demarcation"

//li/p[following-sibling::h1[.="Demarcation"]]

推荐阅读