Зачистка сложной, казалось бы, таблицы HTML с использованием Python - PullRequest
0 голосов
/ 26 июня 2019

При поиске жестких веб-сайтов для чтения данных я нашел хороший пример в следующем.Я решил это, используя грубую силу и не элегантное решение.Однако я уверен, что это элегантный способ деконструировать таблицу с этой страницы (элемент BoxBg1).

Я могу получить каждый элемент таблицы, используя отдельные x-пути страницы: https://www.moneycontrol.com/financials/3mindia/balance-sheetVI/MI42

Например, «Запасы и излишки» на март 2018 года это «/ html / body / div [2] / div [3] / div [2] / div [3] / div [2] / div [2»] / div [2] / div [1] / table [2] / tbody / tr [9] / td [3] '

Значение можно легко извлечь с помощью кода:

driver = webdriver.Firefox()

driver.get('https://www.moneycontrol.com/financials/3mindia/balance-sheetVI/MI42')

trial_xpath ='/html/body/div[2]/div[3]/div[2]/div[3]/div[2]/div[2]/div[2]/div[1]/table[2]/tbody/tr[9]/td[3]'

print(driver.find_element_by_xpath(trial_xpath).text)

Точно так же я получил все элементы.Но как мне аккуратно получить таблицу, используя больший элемент xpath или css_selector и т. Д.

xpath таблицы: '// [содержит (concat ("", @class, ""),concat ("", "boxBg1", ""))] |// [содержит (concat ("", @class, ""), concat ("", "hed", ""))] '

Хорошо, если текст, выделенный жирным шрифтом,не извлекаемые, они являются производными от остальных данных таблицы.

Я также попытался выполнить цикл с помощью find_elements_by_xpath ('.// ​​tr'), как описано в следующем коде.Увы, это не сработало и выдает неверную ошибку в консоли python.

Whole_table_xpath = '//*[contains(concat( " ", @class, " " ), concat( " ", "boxBg1", " " ))] | //*[contains(concat( " ", @class, " " ), concat( " ", "hed", " " ))]'

Whole_table_element = driver.find_element_by_xpath(Whole_table_xpath)
for i in Whole_table_element.find_elements_by_xpath('.//tr'):
    print(driver.find_element_by_xpath(i).text)
    print(driver.find_element_by_xpath(i).get_attribute("value"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...