无法创建xpath以便能够有条件地定位元素

时间:2018-12-15 13:42:14

标签: python python-3.x xpath web-scraping lxml

我一直在尝试创建一个xpath,该xpath应该位于Yes元素中的前三个p直到Demarcation元素中的文本h1为止。我在下面的脚本中使用的现有文本可以找到p元素中的所有文本。但是,我找不到前进的任何想法。只要考虑一下我已经创建的一个占位符即可。

如何创建一个xapth以便能够在Yes元素中找到前三个p,而没有其他内容?

到目前为止我的尝试:

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)

2 个答案:

答案 0 :(得分:2)

尝试以下操作选择标题executables: state-exe: main: Main.hs source-dirs: app ghc-options: - -threaded - -rtsopts - -with-rtsopts=-N dependencies: - state - transformers 的兄弟姐妹之前的段落

"Demarcation"

答案 1 :(得分:0)

您似乎正在尝试依赖包含h1的{​​{1}}标记,所以从它开始:

Demarcation

这个想法是获取以前的//h1[contains(., "Demarcation")]/preceding-sibling::p[contains(., "Yes")][position()<4] 元素,我添加了p,所以您只有三个,如果只需要全部position()<4,则可以删除它:

p