首页 > 解决方案 > python'lxml'解析html,通过xpath获取数据不起作用

问题描述

我有一个使用 Python 库获取的网页:'selenium-requests' GET 方法。

response = self.driver.request('GET', url)

response.content是返回的 HTML 的字节表示。


在浏览器(Chrome)中,我使用了一个名为“xpath-finder”的浏览器插件来查找数据字段(文本)的 xpath。

我还在 Firefox 中打开了该页面,并且得到了相同的 xpath。我相信 xpath 是正确的。

我得到了 HTML,然后需要使用 xpath 提取数据。


import lxml

def extract_data(self, html_bytes):     # passing:  response.content (bytes)
    xpath_geocode = "/html/body/div[5]/table/tbody/tr/td/div[3]/div/table/tbody/tr[1]/td[4]"
    tree = lxml.html.fromstring(html_bytes)
    geocode_info = tree.xpath(xpath_geocode)

    print('geocode_info:', geocode_info)  # this prints: geocode_info: []  <== nada

    # in fact nothing is there at all, this does not enter the for loop, and prints nothing
    for e in tree.xpath(xpath_geocode):
        print(e.text_content)

我有正确的 xpath,我不相信产生相同 xpath 的两种方法是错误的(Chrome 浏览器插件和 Firefox 检查,右键单击,复制 xpath)。

我在这里做错了什么?


难道是这样:

tree = lxml.html.fromstring(html_bytes)

更改 html,使得 xpath 不再有效?如果是这样,我怎么做才能使 HTML 不改变?

或者我怎样才能从'tree'中获得正确的xpath,或者找到它?(通过打印等)。

标签: seleniumxpathlxmllxml.html

解决方案


推荐阅读