【问题标题】:Python XPath - find sibling of element containing Text A OR Text BPython XPath - 查找包含文本 A 或文本 B 的元素的同级
【发布时间】:2022-01-21 08:45:53
【问题描述】:

同学们,

我正在抓取一些下载链接。在目标网站上,每个目标下载链接有时会出现在文本'Application Proof (1st submit)'之后,有时会出现在文本'PHIP(第一次修订证明)'之后。我当前的代码只抓取“申请证明(第一次提交)”之后的链接:

all_proofs = driver.find_elements_by_xpath("//span[contains(text(),'Application Proof (1st submission)')]/following-sibling::a[contains(.,'Full Version')]")

有没有什么方法可以在这个 XPath 中使用 OR 逻辑在这两种情况下抓取并获得一个链接列表,根据它们在网站源代码中出现的顺序?逻辑大概是:

all_proofs = driver.find_elements_by_xpath("//span[contains(text(),'Application Proof (1st submission)' OR 'PHIP (1st revised proof)')]/following-sibling::a[contains(.,'Full Version')]")

不幸的是,没有其他解决方法可以代替这个逻辑,因为:

  1. 我不能简单地抓取所有包含“完整版”的下载链接,因为其中一些链接不符合我的标准,只有那些遵循文本“申请证明(第一次提交)”的链接或 'PHIP(第一次修订证明)' 做。
  2. 我无法抓取“申请证明(第一次提交)”文本后面的一个链接列表,然后抓取“PHIP”后面的另一个链接列表 (第一次修订证明)”,最后将它们连接在一起,因为我需要此列表与网站源代码中的链接顺序完全相同。

非常感谢您的帮助!

【问题讨论】:

  • 如果我的回答解决了您的问题,请告诉我

标签: python selenium web-scraping xpath


【解决方案1】:

是的,您可以在 XPath 中使用 OR 运算符。
您的 XPath 表达式可能是这样的:

all_proofs = driver.find_elements_by_xpath("//span[contains(text(),'Application Proof (1st submission)') or contains(text(),'PHIP (1st revised proof)')]/following-sibling::a[contains(.,'Full Version')]")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    相关资源
    最近更新 更多