使用 Xpath 从属性值获取元素名称

问题描述 投票:0回答:1

我正在尝试获取具有特定属性值的每个节点的元素/标签名称。

我有一个 xml:

<a node='1'>This</a>
<b node='2'>Is</b>
<c node='23'>A</c>
<d selector='g'>Loud</d>
<e node='4'>Dog</e>

我有一个我想要收集的信息节点列表,称为

nodes

我从这些节点中选择文本:

for node in nodes:
   get_text = response.xpath(f'//*[@node="{node}"]//text()').extract()

我还想要节点元素的名称。然而,当我在同一个 for 循环中使用这一行时:

get_name = response.xpath(f'//*[@node="{node}"]/name()').get()

我收到错误:

ValueError: XPath error: Invalid expression

我尝试了很多变体,但无法获取每个节点的元素/标签名称。

python xml xpath scrapy
1个回答
0
投票

我知道如何获取元素标签名称的最好方法是使用 scrapy 内置正则表达式方法

re

我通常使用的模式是

r'<(\w+)\s'

这是一个例子:

scrapy shell

In [1]: markup = """<html><a node='1'>This</a>
   ...: <b node='2'>Is</b>
   ...: <c node='23'>A</c>
   ...: <d selector='g'>Loud</d>
   ...: <e node='4'>Dog</e></html>"""

In [2]: sel = scrapy.Selector(text=markup)

In [3]: sel.xpath('//*[@node]').re('<(\w+)\s')
Out[3]: ['a', 'b', 'c', 'e']
  • 在上面的示例中,我从您提供的示例中获取标记并将其包装在父标记中。
  • 然后我用它来创建一个 scrapy 选择器对象。
  • 然后我运行 xpath 查询来获取具有
    node
    属性
  • 的所有元素
  • 然后使用
    .re
    方法搜索正则表达式模式以找到元素标签名称。
  • 输出是包含节点属性的所有元素标签名称的列表。
© www.soinside.com 2019 - 2024. All rights reserved.