Python:在特定元素上本地使用xpath

pvt*_*pns 39 python xpath lxml

我正试图从带有xpath的页面获取链接.问题是我只想要表中的链接,但是如果我在整个页面上应用xpath表达式,我将捕获我不想要的链接.

例如:

tree = lxml.html.parse(some_response)
links = tree.xpath("//a[contains(@href, 'http://www.example.com/filter/')]")
Run Code Online (Sandbox Code Playgroud)

问题是将表达式应用于整个文档.我找到了我想要的元素,例如:

tree = lxml.html.parse(some_response)
root = tree.getroot()
table = root[1][5] #for example
links = table.xpath("//a[contains(@href, 'http://www.example.com/filter/')]")
Run Code Online (Sandbox Code Playgroud)

但这似乎也在整个文档中执行查询,因为我仍在捕获表外的链接.此页面显示"当在元素上使用xpath()时,将针对元素(如果是相对的)或针对根树(如果是绝对的)评估XPath表达式:".那么,我使用的是绝对表达式,我需要使它相对吗?是吗?

基本上,我怎样才能只过滤此表中存在的元素?

phi*_*hag 60

你的xpath以斜杠(/)开头,因此是绝对的..在前面添加一个点()使其相对于当前元素即

links = table.xpath(".//a[contains(@href, 'http://www.example.com/filter/')]")
Run Code Online (Sandbox Code Playgroud)

  • @pvt pns,应该是`.// a`来搜索当前元素中的任何深度. (6认同)
  • 是的,我之前有错误的元素.现在它有效. (2认同)