CoderCastrov logo
CoderCastrov
Парсер

Case: Парсинг данных с использованием Selenium

Case: Парсинг данных с использованием Selenium
просмотров
3 мин чтение
#Парсер

Один из моих игровых полей на Python, ВОТ, это сработало

Я работаю с грязными данными каждый день, источник может быть где угодно - на веб-сайтах или в любых источниках офлайн. После того, как вы получили такие данные, у вас остается только 2 варианта:

  1. Скрэпить данные с использованием парсера.
  2. Найти другую работу.

Я думаю, мы все выбираем второй вариант, конечно.


Я признаю, что Python меняет всю мою рабочую жизнь. Я только несколько месяцев назад основательно изучил его и применил в своей рабочей жизни. Я - тип человека, который очень энтузиазмирован обучением, и, на самом деле, я не могу представить, как бы выглядела моя жизнь без Python. Как сказал Ганди:

Живи так, будто ты умрешь завтра. Учись так, будто ты будешь жить вечно.

Python - это такой удобный язык программирования, довольно легкий для изучения и понятный по сравнению с другими языками. Если вы новичок в программировании, я рекомендую вам сначала изучить Python и понять его концепции.

ЧТО ТАКОЕ ПАРСИНГ ДАННЫХ?

Это действие по извлечению ценной информации или данных с веб-страницы. Обычно это необходимо, когда вы работаете с общедоступными наборами данных, которые еще не доступны на Kaggle и т.д., и вам нужно получить данные с веб-сайта.

Чтобы сэкономить время и усилия, вы можете спарсить этот веб-сайт, запустив скрипт на языке Python. В этом случае используется фреймворк Selenium.

ПОЧЕМУ SELENIUM?

Для парсинга веб-сайтов можно использовать несколько известных фреймворков, таких как BeautifulSoup, lxml и т.д. Фактически, Selenium не создавался в основном для парсинга веб-сайтов, это фреймворк для автоматизации веб-браузеров в целях тестирования. Но лично я предпочитаю Selenium другим, потому что с его помощью мы можем взаимодействовать с веб-сайтами (вход, клики и т.д.) всего лишь с несколькими дополнительными строками кода, и встроенные функции более прямолинейны.

ШАГИ ДЛЯ ВЫПОЛНЕНИЯ

pip install chromedriver_binary
  1. Импортируйте необходимые пакеты в свой скрипт
from selenium import webdriver
import chromedriver_binary
import pandas as pd
import datetime
import numpy as np
  1. Установите 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)"
  1. Создайте веб-драйвер для начала парсинга
driver = webdriver.Chrome()
driver.get(url)
  1. Нажмите на данные, которые вы хотите получить, запустите инструмент "Исследовать элемент" и скопируйте XPATH

  2. Создайте функцию для получения данных из других строк, изменяя только значение

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)
  1. Создайте ежемесячный период, начиная с 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)
                         })
  1. Наконец, подготовьте данные в виде одного фрейма данных, объединив все, очистите их, а затем создайте общее значение как сумму 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)
output data

В следующий раз, если вы хотите запустить дополнительные месяцы, просто запустите все в своем jupyter, и скрипт автоматически получит данные с веб-сайта.


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

У меня также есть другие статьи, которые могут быть интересны для вас.

Я всегда буду учиться дальше, чтобы постоянно совершенствовать свои знания и сотрудничать с теми инструментами, которые я изучил до сих пор, моим следующим планом может быть автоматизация парсинга данных с помощью Airflow. Будьте на связи !!