我正在尝试获取所有<h2>
标记的文本(使用xpath):
<div id="static_id">
<div>...
<a ...>
<div>...
<h2>Text 1</h2>
<a ...>
<div>...
<div>...
<span>...
<h2>Text 2</h2>
<a ...>
<span>...
<h2>Text 3</h2>
<div id="static_id">
<div>...
<span>...
<h2>Text A</h2>
<a ...>
<div>...
<p>...
<div>...
<h2>Text B</h2>
<a ...>
<h2>Text C</h2>
[...]
在我的HTML源代码中,<div>'s
的ID为static_id
。在这些div中只有一个<h2>
标记,我想获得它的内容。最后,我希望有一个如下所示的列表:
lst = [["Text 1", "Text 2", "Text 3"], ["Text A", "Text B", "Text C"]]
请注意,它是一个列表列表(来自一个<div id="static_id">
的每个h2文本应最终位于单独的列表中,如上例所示。
有没有简单的方法来实现这一目标?
我以为我会计算所有static_id
个div并迭代所有<h2>
个标记以实现此目的。我的方法:
list_all = []
div_amount = len(tree.xpath('//div[@id="static_id"]')) # 2 elements in this case (works)
for d in range(1, div_amount+1) # 1,2
h2_count = len(tree.xpath('//div[@class="static_id"]['+str(d)+']//h2')) #count h2
lst = []
for i in range(1, h2_count+1) #1,2,3
h2_text = ''.join(tree.xpath('//div[@id="static_id"]['+str(d)+']//h2['+i+']/text()'))
lst.append(h2_text)
list_all.append(lst)
第2行:计算所有id =“static_id”
第3行:遍历所有id =“static_id”
第4行:计算所有h2(遗憾的是,来自HTML源的所有h2都被计算在内)
第5行:遍历所有h2的
第6行:获取h2'text,然后保存在列表中
有人可以帮帮我吗?我觉得这样做可以更容易,但我不知道如何。
答案 0 :(得分:0)
轻松制作单行:
list_all = [ static_id_div.xpath('.//h2/text()')
for static_id_div in tree.xpath('//div[@id="static_id"]') ]
这里的重要区别是内部查询是针对外部查询返回的元素运行,而不是让它们从文档的根开始工作。