我正在尝试获取具有特定属性值的每个节点的元素/标签名称。
我有一个 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
我尝试了很多变体,但无法获取每个节点的元素/标签名称。
我知道如何获取元素标签名称的最好方法是使用 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']
node
属性.re
方法搜索正则表达式模式以找到元素标签名称。