Обработка html таблиц с Python и Selenium
Здравствуйте! В сегодняшней статье мы рассмотрим как распарсить HTML таблицу при помощи Python и Selenium webdriver. И прежде всего создадим html файл с примером таблицы.
<!DOCTYPE html>
<html>
<style>
table, th, td {
border:1px solid black;
}
</style>
<body>
<h2>A basic HTML table</h2>
<table style="width:100%">
<tr>
<td>Язык</td>
<td>Рейтинг</td>
</tr>
<tr>
<td>Python</td>
<td>10</td>
</tr>
<tr>
<td>JavaScript</td>
<td>6</td>
</tr>
</table>
</body>
</html>
Если все сделано правильно, то в браузере должна появиться таблица.
Далее скачиваем selenium web driver для Firefox. По адресу https://github.com/mozilla/geckodriver/releases/. Называется он geckodriver. Необходимо скачать архив и распаковать его.
# Импортируем модули драйвера
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# В экземпляре класса передаем путь к exe файлу вебдрайвера
driver = webdriver.Firefox(executable_path=r'путь_к_драйверу/geckodriver.exe')
# ссылка на html таблицу,
# впереди обязательно прописываем file:///
link2 = "file:///C:/Users/УЗИ/Desktop/Таблица.html"
print(link2)
try:
# открываем ссылку в браузере
driver.get(link2)
# находим количество строк в таблице
rows = len(driver.find_elements(by=By.XPATH, value = '/html/body/table/tbody/tr'))
# подсчет количества столбцов
cols = len(driver.find_elements(by=By.XPATH, value = '/html/body/table/tbody/tr[1]/td'))
print(rows)
print(cols)
# итерация по строкам и столбцам таблицы
for r in range(2, rows+1):
for c in range(1, cols+1):
value = driver.find_element(by=By.XPATH, value = '/html/body/table/tbody/tr['+str(r)+']/td['+str(c)+']').text
print(value, end = ' \n')
finally:
time.sleep(30)
# обязательно прописываем выход из вебдрайвера
driver.quit()
# вывод
/*
Python
10
JavaScript
6
*/
В нашем примере используются локаторы типа /html/body/table/tbody/tr. Для его получения, необходимо сперва зайти в инструменты разработчика, выбрать элемент из ячейки таблицы и правой кнопкой мыши скопировать XPATH.
По ним вебдрайвер находит искомые элементы. Метод find_elements находит все элементы с данным локатором и возвращает список. Далее при помощи метода len вычисляется длина списка.
Для парсинга таблицы, вычисленные значения , передаются в цикл for, где они подставляются в локатор следующим образом tr['+str(r)+']/td['+str(c)+']. Методом text получаем текст содержащийся по данной ячейке таблицы.
Таким образом, последовательно, можно пройтись по достаточно крупной таблице с какого-либо сайта.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.