Как использовать Selenium для парсинга данных с веб-сайта
Парсинг веб-сайтов стал неотъемлемой частью процесса веб-разработки. Он позволяет извлекать данные с веб-сайтов и использовать их для различных целей, таких как анализ или создание новых приложений. В Python есть ряд библиотек, которые можно использовать для парсинга веб-сайтов, включая BeautifulSoup и Scrapy. Однако, когда речь идет о парсинге динамических веб-сайтов, то есть таких, которые требуют взаимодействия пользователя для загрузки данных, может пригодиться библиотека Selenium.
В этой статье мы рассмотрим фрагмент кода, который демонстрирует, как использовать Selenium для парсинга данных с веб-сайта. Конкретно, мы рассмотрим, как извлечь информацию о странах мира с веб-сайта “https://www.scrapethissite.com/pages/simple/". Мы извлечем данные, такие как название страны, столица, население и площадь.
Прежде чем мы перейдем к коду, важно понять, что такое Selenium и что он делает. Selenium - это веб-драйвер, который позволяет автоматизировать задачи, такие как нажатие кнопок и заполнение форм на веб-страницах. Он имитирует взаимодействие пользователя с веб-сайтом, что полезно при попытке парсить динамические веб-сайты.
Объяснение кода
Давайте посмотрим на код:
from selenium import webdriver
import pandas as pd
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
# Установка пути к драйверу Chrome
serv_obj = Service("F:\Automation Testing\selenium\chromedriver.exe")
# Запуск Chrome с использованием драйвера
demo = webdriver.Chrome(service=serv_obj)
# URL, который мы хотим парсить
url = "https://www.scrapethissite.com/pages/simple/"
# Загрузка веб-сайта
demo.get(url)
Первое, что мы делаем, это импортируем необходимые библиотеки, включая Selenium и pandas, которые являются библиотеками для манипулирования данными. Мы также импортируем класс Service
и By
из модуля selenium.webdriver.chrome.service
. Класс Service
используется для настройки драйвера, а By
используется для указания метода поиска элементов на странице.
Затем мы устанавливаем путь к драйверу Chrome, используя класс Service
. Драйвер Chrome используется для взаимодействия с браузером Chrome. Затем мы запускаем Chrome, используя метод webdriver.Chrome()
и передаем в него объект service
.
Мы определяем URL, который мы хотим парсить, в данном случае это “https://www.scrapethissite.com/pages/simple/". Наконец, мы загружаем веб-сайт, используя метод get()
объекта demo
.
Затем мы определяем серию списков, которые мы будем использовать для хранения данных, которые мы хотим извлечь. Код использует метод find_elements
объекта веб-драйвера для поиска всех элементов, которые соответствуют указанному выражению XPath для каждой категории данных, которые мы хотим парсить. Затем извлекается текст каждого элемента и сохраняется в списке.
# Название страны
country_name = []
cn = demo.find_elements(By.XPATH, "//h3[@class='country-name']")
for country in cn:
result = country.text
country_name.append(result)
# Столица страны
country_capital = []
cc = demo.find_elements(By.XPATH, "//span[@class='country-capital']")
for capital in cc:
result = capital.text
country_capital.append(result)
# Население страны
country_population = []
cp = demo.find_elements(By.XPATH, "//span[@class='country-population']")
for population in cp:
result = population.text
country_population.append(result)
# Площадь страны
country_area = []
ca = demo.find_elements(By.XPATH, "//span[@class='country-area']")
for area in ca:
result = area.text
country_area.append(result)
После того, как мы извлекли все данные, мы можем использовать библиотеку pandas для создания фрейма данных с извлеченными данными и сохранения его в файл Excel.
df = pd.DataFrame({
"Название страны": country_name,
"Столица": country_capital,
"Население": country_population,
"Площадь (кв. км)": country_area
})
df.to_excel("WorldCountries.xlsx")
Вывод
В этой статье мы обсудили, как использовать Selenium для извлечения данных с веб-сайта и сохранения их в файл Excel. Selenium предоставляет мощный и гибкий способ извлечения данных с веб-сайтов, и его использование не ограничивается только парсингом. С помощью библиотеки pandas мы легко можем обрабатывать и сохранять извлеченные данные для дальнейшего анализа.