2013-02-18 68 views
0

我想创建一个列表与两个数据项的字典。条件xpath?需要xpath如果更具体的XPath匹配

我在看的页面有37个匹配的//div[@id='content']/*[self::p or self::h2]/a[2];然而,它只有33个匹配 //div[@id='content']/*[self::p or self::h2]/a[contains(@href,'game')]/img[@src] 这两个xpaths共有//div[@id='content']/*[self::p or self::h2]。我实际上只想获得匹配第一个xpath的元素(如果第二个xpath匹配),并且保留第四个元素而没有第二个元素。

我希望这可以用xpath来完成,但如果没有,可以使用一些建议来编写一个在python中实现的函数。

回答

0

您可以在XPath中进行匹配,然后在Python中简单地获取生成的父节点。

+0

谢谢。它看起来像这是我想在这里:http://stackoverflow.com/questions/5597538/xpath-get-parent-element – user1780952 2013-02-19 00:25:52

+0

但是,我不明白如何应用它。有人可以指出我对此更清楚的参考。 – user1780952 2013-02-19 00:30:56

+0

我不知道你的意思是“应用它”。 – 2013-02-19 05:47:01

0

听起来好像这是你想要的东西:

//div[@id='content']/*[self::p or self::h2]/a[2][contains(@href,'game') and img[@src]] 

你能不能给一个试试?

+0

谢谢。第二个xpath是[1],所以这不起作用。 – user1780952 2013-02-19 00:21:12

+0

对不起,我不知道你的意思是“第二个XPath是[1]”。你能澄清一下吗?你是说你想找到某个先前的邻居在其下有一个图像的“a [2]”?如果是这样,那么你的问题就完全不清楚了。 – JLRishe 2013-02-19 02:02:08

+0

对不起,我很难解释这一点。我相信“父母”是“// div [@ id ='content']/* [self :: p or self :: h2]”。 xpath用“/ a [2]”扩展了37个匹配项,xpath用“/ a [contains(@ href,'game')]/img [@src]”扩展了33个匹配项。所以,当我找到后者的实例时,我想要这个值,但是我也想要“/ a [2]”的匹配,它们是同一记录的一部分。让我知道如果这更清楚,我可能可以如果我更好地了解术语,则会更好地解释。 – user1780952 2013-02-19 03:27:19

0

你是否在寻找这个XPath:

//div[@id='content']/*[self::p/a[contains(@href,'game')]/img[@src] or self::h2/a[contains(@href,'game')]/img[@src]]/a[2]