XPath通过超链接获取文本(Python)

时间:2018-07-16 03:40:25

标签: python html xpath lxml

我是使用XPath的新手(而且我一般是Python的相对初学者)。我正在尝试通过它从Wikipedia页面的第一段中删除文本。

以Python页面(https://en.wikipedia.org/wiki/Python_(programming_language)

为例

如果我将其放入变量

page = requests.get("https://en.wikipedia.org/wiki/Python_(programming_language)")
tree = html.fromstring(page.content)

那我知道所需的段落在XPath /html/body/div[3]/div[3]/div[4]/div/p[1]

所以我将文本带入一个变量

first = tree.xpath("/html/body/div[3]/div[3]/div[4]/div/p[1]/text()")

此输出结果

[' is an ', ' ', ' for ', '. Created by ', ' and first released in 1991, Python has a design philosophy that emphasizes ', ', notably using ', '. It provides constructs that enable clear programming on both small and large scales.', '\n']

如您所见,我缺少Web链接中的单词/句子。

2 个答案:

答案 0 :(得分:0)

链接本身就是您需要下降的节点。

/html/body/div[3]/div[3]/div[4]/div/p[1]//text()

答案 1 :(得分:0)

您的XPath查询仅与该节点的文本子节点匹配。嵌入的文本存在于另一个节点上,因此被排除在外。

  1. 要下降,请按照建议使用//text();这将从相关节点开始检索任何降序节点的文本值。

    /html/body/div[3]/div[3]/div[4]/div/p[1]//text()
    
  2. 或者,您可以选择有问题的节点本身,然后使用解析器方法text_content()来检索文本,以检索包括所有子节点的文本。

lxml import html
import requests

page = requests.get('https://en.wikipedia.org/wiki/Python_(programming_language)')
tree = html.fromstring(page.content)
firstp = tree.xpath('/html/body/div[3]/div[3]/div[4]/div/p[1]')
firstp[0].text_content()