【问题标题】:extract href values containing keyword using XPath in python在python中使用XPath提取包含关键字的href值
【发布时间】:2020-12-31 17:34:17
【问题描述】:

我知道这个问题的变体已被问过很多次,但我无法破解它并得到我想要的。

我有一个website,里面有几张桌子。感兴趣的表包含一列,其中每一行包含单词Text 超链接到不同的页面。以下是上述链接页面第一行的具体示例:

<a href="_alexandria_RIC_VI_099b_K-AP.txt">Text</a>

这是一般模式:

<a href="_something_something-blah-blah.txt">Text</a>

现在我正在这样做:

import requests  
import lxml.html as lh
page = requests.get("http://www.wildwinds.com/coins/ric/constantine/t.html")
doc = lh.fromstring(page.content)
href_elements = doc.xpath('/html/body/center/table/tbody/tr/td/a/@href')
print(href_elements)

所需的响应应该是一个如下所示的项目数组:_something_something-blah-blah.txt 我得到的是一个空数组。

由于页面还有其他我不感兴趣的 href 元素,我还想修改查询以仅获取值中包含 .txt 的 href 元素。

非常感谢您提供的任何帮助!

【问题讨论】:

  • @mzjn,根据您的要求更新

标签: python xpath lxml href


【解决方案1】:

尝试类似:

href_elements = doc.xpath('//center//table//a[contains(@href,".txt")]["Text"]/@href')
for href in href_elements:
    print(href)

输出:

_alexandria_RIC_VI_099b_K-AP.txt
_alexandria_RIC_VI_100.txt
_alexandria_RIC_VI_136.txt
_alexandria_RIC_VI_156.txt

等等

【讨论】:

  • 如果我正在执行逐行操作,并且只想提取该行的 href 标记,而不是整个表,是否对 xpath 命令进行了修改以将范围限制为该行, 而不是整个表?
  • @NotoriousBOG 如果元素具有href 属性,则xpath 表达式会查找表中的每个&lt;a&gt; 元素。如果要将输出限制为特定的 &lt;a&gt; 元素,则必须显示该元素与其所有同级元素相比的特殊之处(例如,它在表中的位置,对其特殊的文本字符串,等)最好的方法是将其作为一个单独的问题与一些示例 html 一起发布。
  • 感谢您的回复。我发布了后续问题here
猜你喜欢
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 2011-01-24
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多