Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取在HTML文档中形成字符串的节点的xpath_Python_Html_Regex_Xml_Xpath - Fatal编程技术网

Python 获取在HTML文档中形成字符串的节点的xpath

Python 获取在HTML文档中形成字符串的节点的xpath,python,html,regex,xml,xpath,Python,Html,Regex,Xml,Xpath,问题:我想找到在HTML文档中形成文本字符串的节点的xpath。使用的语言是python lxml来解析文档 为了说明这一思想,请参阅文献: 样本文件 这是一个标题 这是另一个标题 从 SFO至JFK 2015年5月2日下午2:00。有关详细信息,请访问confirm.com 旅行者的名字是 无名氏 …您可以尝试以下方法: import lxml.html as lh from lxml import etree elem_tree = lh.parse("Q12.html") inpu

问题:我想找到在HTML文档中形成文本字符串的节点的xpath。使用的语言是python lxml来解析文档

为了说明这一思想,请参阅文献:

样本文件 这是一个标题 这是另一个标题

SFO至JFK 2015年5月2日下午2:00。有关详细信息,请访问confirm.com 旅行者的名字是 无名氏


…您可以尝试以下方法:

import lxml.html as lh
from lxml import etree

elem_tree = lh.parse("Q12.html")
input_string = ["SFO to JFK on May 2, 2015", "Traveler name is John Doe"]

for i in input_string:
    xpath = "//*[contains(normalize-space(.), '{0}') and not(.//*[contains(normalize-space(.), '{0}')])]/*"
    node = elem_tree.xpath(xpath.format(i))[0]

    print '{0} -> {1}'.format(i, elem_tree.getpath(node))

    #Output:
    #SFO to JFK on May 2, 2015 -> /html/body/p[2]/b[1]
    #Traveler name is John Doe -> /html/body/div/h3
简要说明:

containsnormalize space.,“{0}”:包含输入_字符串之一的文本的筛选器节点

not.//*[containsnormalize space.,“{0}]”:如果节点的任何子代不包含文本,请选择该节点。换句话说,选择包含文本的最内部节点

:返回用于查找元素的结构化绝对XPath表达式

更新:

将xpath变量字符串中的尾部/*替换为:

/descendant-or-self::*[contains('{0}', text()) or contains(text(), '{0}')]

工作的HTML结构张贴的问题,以及一个你在下面的评论链接。然而,解决两个示例HTML所展示的具有不同特征的一般情况超出了本答案中xpath查询的范围。

xpath不是仅仅是//B,因为这是您正在搜索的唯一HTML元素,它应该为您提供页面上所有B元素的数组。您还可以使用$xxpath在chrome控制台中运行XPath;对不起,我应该澄清一下。文件不是固定的。正如问题中应该提到的那样,如果我有任何HTML和一组字符串,我将如何获得xpath?回答和解释都很好,只是它不适用于我所有的字符串。例如html,我试图找到的字符串是'Phone:1-213-484-7000',但上面的'xpath'找不到相同的节点。@Ark Check UPDATE部分,这也适用于链接的要点中的html。然而,我并不是要解决你提出的所有问题。似乎太多了:感谢更新!是的,通用解决方案会很难,因为可能会有一些微妙的情况。然而,我认为你的回答提供了一个很好的起点