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