Case: Парсинг данных с использованием Selenium
Один из моих игровых полей на Python, ВОТ, это сработало
Я работаю с грязными данными каждый день, источник может быть где угодно - на веб-сайтах или в любых источниках офлайн. После того, как вы получили такие данные, у вас остается только 2 варианта:
- Скрэпить данные с использованием парсера.
- Найти другую работу.
Я думаю, мы все выбираем второй вариант, конечно.
Я признаю, что Python меняет всю мою рабочую жизнь. Я только несколько месяцев назад основательно изучил его и применил в своей рабочей жизни. Я - тип человека, который очень энтузиазмирован обучением, и, на самом деле, я не могу представить, как бы выглядела моя жизнь без Python. Как сказал Ганди:
Живи так, будто ты умрешь завтра. Учись так, будто ты будешь жить вечно.
Python - это такой удобный язык программирования, довольно легкий для изучения и понятный по сравнению с другими языками. Если вы новичок в программировании, я рекомендую вам сначала изучить Python и понять его концепции.
ЧТО ТАКОЕ ПАРСИНГ ДАННЫХ?
Это действие по извлечению ценной информации или данных с веб-страницы. Обычно это необходимо, когда вы работаете с общедоступными наборами данных, которые еще не доступны на Kaggle и т.д., и вам нужно получить данные с веб-сайта.
Чтобы сэкономить время и усилия, вы можете спарсить этот веб-сайт, запустив скрипт на языке Python. В этом случае используется фреймворк Selenium.
ПОЧЕМУ SELENIUM?
Для парсинга веб-сайтов можно использовать несколько известных фреймворков, таких как BeautifulSoup, lxml и т.д. Фактически, Selenium не создавался в основном для парсинга веб-сайтов, это фреймворк для автоматизации веб-браузеров в целях тестирования. Но лично я предпочитаю Selenium другим, потому что с его помощью мы можем взаимодействовать с веб-сайтами (вход, клики и т.д.) всего лишь с несколькими дополнительными строками кода, и встроенные функции более прямолинейны.
ШАГИ ДЛЯ ВЫПОЛНЕНИЯ
pip install chromedriver_binary
- Импортируйте необходимые пакеты в свой скрипт
from selenium import webdriver
import chromedriver_binary
import pandas as pd
import datetime
import numpy as np
- Установите URL-адрес, на который вы хотите перейти
url = "[https://www.bps.go.id/dynamictable/2015/03/10/812/jumlah-penumpang-yang-berangkat-pada-penerbangan-domestik-di-bandara-utama-indonesia-2006-2019-orang-.html](https://www.bps.go.id/dynamictable/2015/03/10/812/jumlah-penumpang-yang-berangkat-pada-penerbangan-domestik-di-bandara-utama-indonesia-2006-2019-orang-.html)"
- Создайте веб-драйвер для начала парсинга
driver = webdriver.Chrome()
driver.get(url)
-
Нажмите на данные, которые вы хотите получить, запустите инструмент "Исследовать элемент" и скопируйте XPATH
-
Создайте функцию для получения данных из других строк, изменяя только значение
def parse_table(val):
value = driver.find_elements_by_xpath('//*[[@id](http://twitter.com/id)="tableRightBottom"]/tbody/tr[{}]/td'.format(str(val)))added_value = []for item in value:
member = item.text
member = "".join(member.split())
added_value.append(member)
return added_valuepolonia = parse_table(1)
soeta = parse_table(2)
juanda = parse_table(3)
ngurah_rai = parse_table(4)
hasanudin = parse_table(5)
- Создайте ежемесячный период, начиная с 2006 года до 2019 года
start_year = 2006
end_year = 2020month_key = pd.DataFrame({"month": pd.period_range(start_year, freq='M', periods=(end_year-start_year)*12)
})
- Наконец, подготовьте данные в виде одного фрейма данных, объединив все, очистите их, а затем создайте общее значение как сумму 5 существующих аэропортов для каждого месяца
complete_data = pd.concat([month_key,
pd.DataFrame({"polonia": polonia,
"soeta": soeta,
"juanda": juanda,
"ngurah_rai": ngurah_rai,
"hasanudin": hasanudin
})
], axis=1)complete_data = complete_data.dropna()def cast_as_numeric(df, col):
df[col] = pd.to_numeric(df[col])
return print("cast as numeric done")cast_as_numeric(complete_data, "polonia")
cast_as_numeric(complete_data, "soeta")
cast_as_numeric(complete_data, "juanda")
cast_as_numeric(complete_data, "ngurah_rai")
cast_as_numeric(complete_data, "hasanudin")complete_data["total"] = complete_data.iloc[:,1:].sum(axis=1)
В следующий раз, если вы хотите запустить дополнительные месяцы, просто запустите все в своем jupyter, и скрипт автоматически получит данные с веб-сайта.
Спасибо за оценку этой статьи, я просто хочу поделиться тем, что я сделал до сих пор с моими усилиями, чтобы работать умно. Мой девиз - делать все, что нужно, и не делать то, что неэффективно.
У меня также есть другие статьи, которые могут быть интересны для вас.
- Как запланировать запрос с помощью Airflow и Google BigQuery
- Создание сравнительного тренда по времени с помощью Tableau
Я всегда буду учиться дальше, чтобы постоянно совершенствовать свои знания и сотрудничать с теми инструментами, которые я изучил до сих пор, моим следующим планом может быть автоматизация парсинга данных с помощью Airflow. Будьте на связи !!