Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 lxml xpath:如何使该谓词工作_Python_Xpath_Lxml_Predicate - Fatal编程技术网

python lxml xpath:如何使该谓词工作

python lxml xpath:如何使该谓词工作,python,xpath,lxml,predicate,Python,Xpath,Lxml,Predicate,早上好 最近我把python和网页抓取作为一种爱好 我正试图解决python lxml和xpath谓词的问题,但唉,显然stackoverflow上没有类似的东西。所以我设法在下面的代码中复制,希望有人看到我没有看到的 有人能解释为什么结果3是一个空列表吗? 我希望结果3与结果1相同 我如何才能实现结果3=结果1 版本:Python3.7.3、lxml 4.4.0(使用pip安装,而不是Christoph Gohlke的二进制文件),安装在AMD windows机器上 提前谢谢 斯特夫 预期输出

早上好

最近我把python和网页抓取作为一种爱好

我正试图解决python lxml和xpath谓词的问题,但唉,显然stackoverflow上没有类似的东西。所以我设法在下面的代码中复制,希望有人看到我没有看到的

有人能解释为什么结果3是一个空列表吗? 我希望结果3与结果1相同

我如何才能实现结果3=结果1

版本:Python3.7.3、lxml 4.4.0(使用pip安装,而不是Christoph Gohlke的二进制文件),安装在AMD windows机器上

提前谢谢

斯特夫

预期输出:

Result1 = ['some_map/some_file.png']
Result2 = True
Result3 = []
Result1 = ['some_map/some_file.png']
Result2 = True
Result3 = ['some_map/some_file.png']

第三个示例中的谓词(
@href[contains(@href,“some_file”)]
)翻译成英语,意思是“在
简单_记录
中找到一个节点,该节点有一个属性
href
,该属性本身有一个属性
href
,该属性值包含字符串
some_file
”。这样的节点不存在,因此返回一个空的结果列表

用英语来说,您想问的是“在
simple_record
中查找一个节点,该节点具有一个属性
href
,该属性的值包含字符串
some_file
”(谢谢@DanielHaley!)。翻译成xpath后,您可以将其编写为

simple_xpath   = '@href[contains(.,"some_file")]'

现在返回到由谓词过滤的上下文节点(即
@href
属性本身)。该表达式将导致结果3与结果1相同。

第三个示例中的谓词(
@href[contains(@href,“some_file”)]
),翻译成英语意思“在
simple_record
中查找一个节点,该节点具有一个属性
href
,该属性本身具有一个属性
href
,该属性值包含字符串
某个_文件
”。此类节点不存在,因此返回一个空的结果列表

用英语来说,您想问的是“在
simple_record
中查找一个节点,该节点具有一个属性
href
,该属性的值包含字符串
some_file
”(谢谢@DanielHaley!)。转换为xpath后,您可以将其编写为

simple_xpath   = '@href[contains(.,"some_file")]'

现在引用回由谓词过滤的上下文节点(即
@href
属性本身)。该表达式将导致结果3与结果1相同。

您的第三个XPath应该是“@href[包含(,“某些文件”)]”“作为您对@href的第一次引用,它将成为上下文。未测试,因为我没有可用的lxml。
contains()
函数与
start-with()函数的语义不同。如果没有输入示例,问题中的所有内容都没有意义。@Alejandro感谢您指出,
start-with()
的使用是一个遗留问题,我更新了我的帖子。您的第三个XPath应该是“@href[contains(,“some_file”)]”,因为您对@href的第一次引用使其成为上下文。未测试,因为我没有可用的lxml。
contains()
函数与
start-with()函数的语义不同。如果没有输入示例,问题中的所有内容都是毫无意义的。@Alejandro感谢您指出,
start-with()
的使用是一个遗留问题,我更新了我的帖子。我认为您的英文翻译有点不对劲。我认为第一个更像是“查找一个
href
属性,该属性本身有一个属性
href
,该属性的值包含字符串
某个文件
”。第二个更像是“查找一个
href
属性,该属性的值包含字符串
某个_文件
”@DanielHaley-你说得对!这就是当你在没有足够咖啡的情况下进行翻译时会发生的事情!我会编辑的。我觉得你的英文翻译有点不对劲。我认为第一个更像是“查找一个
href
属性,该属性本身有一个属性
href
,该属性的值包含字符串
某个文件
”。第二个更像是“查找一个
href
属性,该属性的值包含字符串
某个_文件
”@DanielHaley-你说得对!这就是当你在没有足够咖啡的情况下进行翻译时会发生的事情!将编辑。