我有以下重复的网页:
<div class="txt ext">
<strong class="param">param_value1</strong>
<strong class="param">param_value2</strong>
</div>
我想使用Xpath单独提取值param_value1
和param_value2
。我该怎么办?
我尝试过以下结构:
'//strong[@class="param"]/text()[0]'
'//strong[@class="txt ext"]/strong[@class="param"][0]/text()'
'//strong[@class="param"]'
其中没有一个单独归我param_value1
和param_value2
。
P.S。我正在使用Python 2.7和最新版本的Scrapy。
答案 0 :(得分:2)
//
表示后代或自我。您在任何上下文中选择任何strong
元素。 [...]
是一个谓词,它根据某些布尔测试限制您的选择。没有strong
元素的class
属性等于txt ext
,因此您可以排除第二个表达式。
您的上一个表达式实际上将返回具有strong
属性的所有param
元素的节点集。然后,您可以从节点集中提取单个节点(使用[1]
,[2]
),然后获取其文本内容(使用text()
)。
您的第一个表达式选择两个节点的文本内容,但它也是错误的。它位于错误的位置,您无法选择节点零(它不存在)。如果您想要第一个节点的文本内容,您应该使用:
//strong[@class="param"][1]/text()
你可以使用
//strong[@class="param"][2]/text()
第二个文字。
答案 1 :(得分:2)
这是我的测试代码:
test_content = '<div class="txt ext"><strong class="param">param_value1</strong><strong class="param">param_value2</strong></div>'
sel = HtmlXPathSelector(text=test_content)
sel.select('//div/strong[@class="param"]/text()').extract()[0]
sel.select('//div/strong[@class="param"]/text()').extract()[1]