CoderCastrov logo
CoderCastrov
Питон

Парсинг данных таблицы с использованием Python 101

Парсинг данных таблицы с использованием Python 101
просмотров
3 мин чтение
#Питон

Простой учебник о том, как легко парсить данные таблицы с любого веб-сайта с помощью Python

В этом учебнике я буду парсить ежедневную генерацию энергии с веб-сайта Ceylon Electricity Board (CEB). https://www.ceb.lk/electricity-generated/en

Пример таблицы можно найти ниже.

Как видно, в таблице или на веб-странице нет указания даты. Но я знаю, что показанные здесь показания являются значениями за предыдущий день. Поэтому часть с датой должна быть вставлена систематически, чтобы сохранить данные в историческом формате.

Давайте начнем кодирование.

Сначала импортируем все необходимые библиотеки.

from selenium import webdriverfrom bs4 import BeautifulSoup as BSoupimport pyodbc import datetimeimport time

Selenium webdriver позволяет нам перемещаться по веб-странице как настоящему пользователю. BeautifulSoup используется для извлечения данных из тегов HTML и XML. pyodbc - это наш коннектор базы данных (MS SQL). datetime и time используются для получения, вы догадались, даты и времени соответственно.

Затем загрузите веб-страницу и подождите 10 секунд, на всякий случай. Здесь мы используем веб-драйвер Chrome для навигации по странице. Для этой цели также можно использовать драйвер Mozilla.

browser = webdriver.Chrome()browser.get(“https://www.ceb.lk/electricity-generated/en")

time.sleep(10)

На следующем шаге нам нужно определить точные HTML-теги, используемые на этой веб-странице, чтобы спарсить данные из них. Функция "Исследовать элемент" в Google Chrome поможет нам в этом.

Анализируя вышеизображенное, видно, что данные хранятся в TABLE. Более точно, местоположение будет TABLE > TR > TD. Поэтому мы говорим программе найти эти части на веб-странице. Если доступно более одной таблицы, нам придется выделить нужную таблицу, указав идентификатор, такой как имя.

bs_obj = BSoup(browser.page_source, 'html.parser')table = bs_obj.find(“table”)rows = table.findAll('tr')

Давайте создадим подключение к базе данных, прежде чем двигаться дальше. В этом сценарии я использую базу данных MS SQL для хранения данных.

server = Ваш адрес сервера’ db = Имя базы данных un = Имя пользователя базы данных’pw = Пароль базы данных’

cnn = pyodbc.connect(DRIVER={ODBC Driver 13 for SQL Server};SERVER=’+server+’;DATABASE=’+db+’;UID=’+un+’;PWD=’+pw)cursor_SQLServer = cnn.cursor()

pyodbc.connect используется для установки подключения к базе данных с использованием указанных данных и выбранного драйвера базы данных.

Пора объявить некоторые переменные.

energy = ’gwh = ’per = ’i = 0Current_date = datetime.datetime.now().date() — datetime.timedelta(days=1)

energy, gwh и per - это значения, которые мы хотим спарсить с веб-сайта. i - это инкрементная переменная, используемая для перебора результатов. Current_date - это наш идентификатор даты для хранения исторических данных.

На следующем и последнем шаге мы будем перебирать все значения TR, найденные на предыдущем шаге, получать значения из них и непосредственно сохранять их в таблице базы данных.

for tr in rows: cols = tr.findAll(‘td’) for td in cols: i += 1 if i == 1: energy = td.get_text().strip()

elif i == 2: gwh = td.get_text().strip()

elif i == 3: per = td.get_text().strip()

i = 0 print(Current_date, energy, gwh, per) SQL_Insert = “insert into py_Electricity_test([Date],[Energy],[GWH],[Percentage]) VALUES(?,?,?,?)” values = [Current_date, energy, gwh, per] cursor_SQLServer.execute(SQL_Insert, values) cnn.commit() browser.close()

Код довольно понятен. Сначала мы берем одно значение TR, затем перебираем TD, удаляем необходимые значения, присваиваем их переменным и сохраняем в базе данных. И, наконец, закрываем окно браузера, чтобы освободить память.

Вола! Таблица заполнена волшебными числами....

Это только основы парсинга данных таблицы. Эту модель можно дополнительно улучшить для навигации по сложным страницам, выполнения очистки данных перед сохранением в таблицу и многого другого.

Надеюсь, это поможет кому-то, кто пытается автоматизировать парсинг и сэкономить много времени.

До следующего раза, пусть сила будет с тобой!