下面是一些html页面的部分(参数的所有名称都是俄语)。它有主类和两个内部类。详细的html代码:
<div class="obj-params">
<div class="wrap">
<div class="obj-params-col" style="min-width:50%;">
<p>
<b>Param1_name</b>" Param1_value"</p>
<p>
<strong>Param2_name</strong>" Param2_value</p>
<p>
<strong>Param3_name</strong>" Param3_value"</p>
</div>
</div>
<div class="wrap">
<div class="obj-params-col">
<p>
<b>Param4_name</b>Param4_value</p>
<div class="inline-popup popup-hor left">
<b>Param5_name</b>
<a target="_blank" href="link">Param5_value</a></div></div>
我想提取Param%d_value
的值。我怎么能用XPath做到这一点?
我尝试过以下表达式:
//div[@class="inline-popup popup-hor left"]/a/text() #extract correctly the name of the link
但是,这个表达式构成了所有Param%d_value
的列表,而不是按有序顺序排列:
//div[@class="obj-params"]/div[@class="obj-params-col"]/p/text()
问题是 - 我如何构建(每个param_value)XPath表达式? E.x.当我使用以下XPath表达式
时 //div[@class="obj-params"]//div[@class="obj-params-col"]/p/child::text()
['Param1_value, Param2_value, Param3_value, Param1_value, Param2_value, Param3_value, Param1_value, Param2_value, Param3_value']
我需要得到以下内容:
XPath_expression_to_extract_only_Param1_value:
['Param1_value, Param1_value, Param1_value, Param1_value, Param1_value, Param1_value, Param1_value, Param1_value, Param1_value']
XPath_expression_to_extract_only_Param2_value:
['Param2_value, Param2_value, Param2_value, Param2_value, Param2_value, Param2_value, Param2_value, Param2_value, Param2_value']
XPath_expression_to_extract_only_Param3_value:
['Param3_value, Param3_value, Param3_value, Param3_value, Param3_value, Param3_value, Param3_value, Param3_value, Param3_value']
答案 0 :(得分:0)
您可以使用child::text()
从div
obj-params-col
类获取文本节点:
//div[@class="obj-params"]//div[@class="obj-params-col"]/p/child::text()
演示(使用xmllint
):
$ xmllint index.html --xpath '//div[@class="obj-params"]//div[@class="obj-params-col"]/p/child::text()'
" Param1_value"
" Param2_value
" Param3_value"
更新:
如果您需要通过参数名称获取参数值,请使用:
//*[text()="Param1_name"]/following-sibling::text()
答案 1 :(得分:0)
sel.xpath('//*[contains(./text(),"Param1_name")]/following-sibling::text()').extract()
sel.xpath('//*[contains(./text(),"Param2_name")]/following-sibling::text()').extract()
sel.xpath('//*[contains(./text(),"Param3_name")]/following-sibling::text()').extract()