如何通过 xpath 提取 Div 的相应文本?



在制作 xpath 从下面给定的 HTML 节点中提取数据时,我无法从 Div 中的相应元素中提取相应的文本。

<div class="Main">
<div class="Sub">
<div class="Birth">Jack</div>
<span class="Date">
<div><span class="Date">6 June 2018</span></div></span></div>
<div class="Sub">
<div class="Birth">Hurley</div>
<span class="Date"><div><span class="Date">21 June 2011</span></div></span></div>
<div class="Sub">
<div class="Birth">Kate</div>
<span class="Date">
<div><span class="Date">11 May 2013</span></div></span></div>
<div class="Sub">
<div class="Birth">John</div>
<span class="Date">
<div><span class="Date">5 March 2001</span></div></span></div>

我想要的是针对<div class="Birth">中的文本提取<div><span class="Date">中的日期文本。 映射提取数据时出现的问题 ["杰克","赫尔利","凯特","约翰"] 通过xpath('//*[@class="Birth"]/text()').extract()和 ['2018年6月6日','2011年6月21日','2013年5月11日','2001年3月5日']xpath('//*[@class="Date"]/text()').extract()是它们不一定会以相同的顺序排列,因此需要在div 中进行相对映射,因为可以看出div 类的名称对于所有段都是相同的。 为了确保它必须是这样的,对于文本元素 Kate - 日期是 2013 年 5 月 11 日。

我不确定兄弟姐妹,但迭代方法可以将其解决为:

for i in range(0, len(list)):
if list_search[i] == "Jack":
Updated = corresponding-value-in-div[i]
break

你可以先获取<div class="Sub">迭代它们的列表,并使用相对xpath来获取每个div的元素

这里有一个例子:

subs = response.xpath('//div[@class="Sub"]')
for sub in subs:
print(sub.xpath('.//div[@class="Birth"]/text()').extract_first())
print(sub.xpath('.//div/span[@class="Date"]/text()').extract_first())

这将返回:

千斤顶

6 六月 2018

赫尔利

2011年6月21日

凯特

11 五月 2013

John 2001年3月5日

请检查以下代码,而不是直接给出名称"Jack",您也可以为它编写另一个 xpath。

response.xpath('//div[contains(text(),"Jack")]//following-sibling::span/div//text()')

最新更新