Xpath:查询包含另一个具有特定tex的元素的同级元素

2024-09-29 23:17:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下HTML,在不改变任何结构或内容的情况下进行了修订:

<a name="Name"></a>
<a name="FEATURE_Name"></a>
<span class="class">
  <nobr>some text <b>Name</b> as  
    <nobr>
      <a href="a.big.complicated.href">kindOfObject</a>
    </nobr>
    (SOMETECHNOBABBLE=protontorpedoes);
  </nobr>
</span>
<blockquote>Further (Details)</blockquote>

这个结构重复了几百次

现在,我有了一个字符串列表,这些字符串对应于文档中其他地方已经拉到一起的每个“名称”,因为很容易找到使用Xpath查询的字符串。我想做的是遍历这个列表,对于上面显示的每个结构,从名称与我当前所在的列表索引名称匹配的块中获取字符串“kindOfObject”

这是我尝试的xpath查询:

tree.xpath("//nobr/b[contains(text(), i)]/following-sibling::nobr/a/text()")

但是,这将返回每个索引的所有kindOfObject值。我想做的是得到每一个,这样我就可以把它们匹配起来key:value pairs 在字典里。因此,当我是Name1时,我的查询只从名为Name1的块中检索kindOfObject值。当我是Name2时,它会得到与之匹配的kindOfObject值,依此类推

查看下面的thomaskison的响应,我尝试运行Xpath查询,用一个名称代替“I”,得到了匹配的kindOfObject,而没有其他内容。这意味着问题出在迭代器上。这是我写的循环,只是为了测试我是否得到了正确的信息:

for i in Names:
    kindOfObject = tree.xpath("//nobr/b[contains(text(), i)]/following-sibling::nobr/a/text()")
    print(kindOfObject)

当相关的i被传递到Xpath查询中时,我希望它能将每个kindOfObject打印一次,但这会为每个索引生成kindOfObject的完整列表


Tags: 字符串textname名称内容列表结构xpath
1条回答
网友
1楼 · 发布于 2024-09-29 23:17:03

这种说法似乎是正确的

<a name="Name"></a>
<a name="FEATURE_Name"></a>
<span class="class">
  <nobr>some text <b>Name1</b> as  
    <nobr>
      <a href="a.big.complicated.href">kindOfObject1</a>
    </nobr>
    (SOMETECHNOBABBLE=protontorpedoes);
  </nobr>
  <nobr>some text <b>Name2</b> as  
    <nobr>
      <a href="a.big.complicated.href">kindOfObject2</a>
    </nobr>
    (SOMETECHNOBABBLE=protontorpedoes);
  </nobr>
</span>
<blockquote>Further (Details)</blockquote>

//nobr/b[contains(text(), "Name1")]/following-sibling::nobr/a/text() 将返回KindofObject 1

//nobr/b[contains(text(), "Name2")]/following-sibling::nobr/a/text() 将返回类对象2

相关问题 更多 >

    热门问题