python 'l xml' парсинг html, получение данных по xpath не работает - PullRequest
0 голосов
/ 19 марта 2020

У меня есть веб-страница, которую я загружаю с библиотекой Python: метод GET 'selenium-questions'.

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 не менялся?

Или как я могу получить правильный xpath из дерева или найти его? (через распечатку et c).

...