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

时间:2018-06-21 10:39:28

标签: html xpath scrapy

在使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><span class="Date">中的文本中的<div class="Birth">中的Date文本。 映射数据提取数据中的问题 ['Jack','Hurley','Kate','John'] 通过 xpath('//*[@class="Birth"]/text()').extract()和 ['2018年6月6日','2011年6月21日','2013年5月11日','2001年3月5日']通过 xpath('//*[@class="Date"]/text()').extract()  是因为它们不一定要使用相同的顺序,因此div中需要一个相对映射,因为可以看出div类的名称对于所有段都是相同的。 为了确保它一定像,对于“文本”元素“凯特-日期”是2013年5月11日。

3 个答案:

答案 0 :(得分:0)

您可以首先获取<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())

这将返回:

杰克

2018年6月6日

Hurley

2011年6月21日

凯特

2013年5月11日

约翰 2001年3月5日

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

请检查以下代码,而不是直接使用名称“ Jack”,还可以为其编写另一个xpath。

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