Python中的lxml XPath一直让我在圈子里运行。我不能让它从HTML表中提取文本,尽管我认为它是正确的XPath。我正在使用Chrome来检查和提取XPath,然后在我的代码中使用它。
以下是直接从页面中获取的HTML表格:
<div id="vehicle-detail-model-specs-container">
<table id="vehicle-detail-model-specs" class="table table-striped vdp-feature-table">
<!-- Price -->
<tr>
<td><strong>Price:</strong></td>
<td>
<strong id="vehicle-detail-price" itemprop="price">$ 2,210.00</strong> </td>
</tr>
<!-- VIN -->
<tr><td><strong>VIN</strong></td><td> *0343</td></tr>
<!-- MILEAGE -->
<tr><td><strong>Mileage</strong></td><td>0 mi</td></tr>
</table>
我正在尝试提取里程。我正在使用的XPath是:
//*[@id="vehicle-detail-model-specs"]/tbody/tr[3]/td[2]
我正在使用的Python代码是:
page = requests.get(URL)
tree = html.fromstring(page.content)
mileage = tree.xpath('//*[@id="vehicle-detail-model-specs"]/tbody/tr[3]/td[2]')
print mileage
注意:我尝试将/text()
添加到最后,但我仍然没有得到任何回复,只是一个空列表[]。
我做错了什么,为什么我无法从上面的示例中提取表值?
答案 0 :(得分:1)
正如Amber指出的那样,你应该省略tbody
部分。
如果您的表格的html代码中没有tbody
标记,则在您的xpath中使用<tbody>
。
使用您发布的html,我可以使用以下xpath提取里程值:
tree.xpath('//*[@id="vehicle-detail-model-specs"]/tr[3]/td[2]')[0].text_content()