Обработка 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 получаем текст содержащийся по данной ячейке таблицы.

Таким образом, последовательно, можно пройтись по достаточно крупной таблице с какого-либо сайта.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.