【问题标题】:XPath not returning anything when asked for table tag [duplicate]当要求输入表标签时,XPath 不返回任何内容 [重复]
【发布时间】:2020-06-07 09:22:21
【问题描述】:

我正在尝试从https://raw.githubusercontent.com/denisemauldin/immer/master/index.html 中提取表值,但它什么也没返回。我做错了什么还是其他什么?

from lxml import html
import requests
page=requests.get('https://raw.githubusercontent.com/denisemauldin/immer/master/index.html')
tree=html.fromstring(page.content)
print(tree.xpath('//table'))

它返回 []

【问题讨论】:

  • 如果使用正确的引号,这确实返回一个表格元素。
  • @MathiasMüller 其返回空
  • 我得到了这个table 元素。
  • XPath 表达式无法按预期工作的第一个原因是您忽略了元素位于命名空间(在本例中为 XHTML 命名空间)中的事实。因为太多人落入这个陷阱,所以我将它作为一个副本关闭;搜索“XPath 默认命名空间”可以找到数百个类似的问题。

标签: python xpath web-scraping


【解决方案1】:

你很接近,非常接近。您需要了解的是,为了提取文本,您需要准确地告诉 XPath 它应该如何遍历树并提取信息。从您的代码中,您只是告诉它遍历到 table 节点,并且您得到 [<Element table at 0x794c120>] 的输出是正确的,因为那是该元素的地址。

以下代码是显式的,将遍历给定标签并使用text() 获取元素的文本。

from lxml import html
import requests
page=requests.get('https://raw.githubusercontent.com/denisemauldin/immer/master/index.html')
tree=html.fromstring(page.content)
print(tree.xpath('//table/tr/td/text()')) # ['immer', 'R Documentation']

您应该考虑使用 HTML 解析器,例如“Beautiful Soup”。你可以阅读更多关于here的信息。

【讨论】:

  • 这不是问题所在。 OP 声明如果 XPath 表达式为 //table,他们将获得一个空列表作为返回值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2021-08-28
相关资源
最近更新 更多