在Scrapy选择器中使用多个xpath

时间:2016-04-20 09:47:44

标签: python xpath scrapy scrapy-spider

我必须使用Scrapy抓取数据:

<div class="data"
     data-name="{"id":"566565", "name":"data1"}" 
     data-property="{"length":"444", "height":"678"}"
>
    data1
</div>
<div class="data"
     data-name="{"id":"566566", "name":"data2"}" 
     data-property="{"length":"555", "height":"777"}"
>
    data2
</div>

我需要data-namedata-property属性。我的选择器是:

selections = Selector(response).xpath('//div[@class="data"]/attribute::data-property').extract()

如何在选择中包含data-name属性?

1 个答案:

答案 0 :(得分:1)

以下XPath应返回data-propertydata-name属性:

//div[@class='data']/attribute::*[name()='data-property' or name()='data-name']

XPath演示:http://www.xpathtester.com/xpath/e720602b62461f3600989be73eb15aec

如果您需要为每个父div以特定格式将两个属性作为一对返回,则无法使用纯XPath 1.0完成此操作。可能需要一些python,可能使用list comprehension(未测试):

selections = [div.xpath('concat(@data-property, " ", @data-name)').extract() \
                   for div in Selector(response).xpath('//div[@class="data"]')]