Python XPath不断返回空列表

时间:2017-12-31 04:57:19

标签: python xpath lxml

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>&nbsp;*0343</td></tr>

    <!-- MILEAGE -->
    <tr><td><strong>Mileage</strong></td><td>0&nbsp;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()添加到最后,但我仍然没有得到任何回复,只是一个空列表[]。

我做错了什么,为什么我无法从上面的示例中提取表值?

1 个答案:

答案 0 :(得分:1)

正如Amber指出的那样,你应该省略tbody部分。 如果您的表格的html代码中没有tbody标记,则在您的xpath中使用<tbody>

使用您发布的html,我可以使用以下xpath提取里程值:

tree.xpath('//*[@id="vehicle-detail-model-specs"]/tr[3]/td[2]')[0].text_content()