Файлы к уроку:
Описание
В этом уроке мы спарсим данные с сайта с помощью Selenium. Selenium нужен, чтобы автоматизировать браузер.
Таблица, которую мы будем извлекать находится здесь. Ее не получится извлечь простым способом, потому что url таблицы не меняется при переходе на другие страницы.
Решение
Импортируем нужные модули, функции и укажем рабочую папку.
# Импортировать модуль и указать папку
import os
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from bs4 import BeautifulSoup
os.chdir(r'c:\Download')
os.getcwd()
Запускаем драйвер и открываем url.
# Запускаем драйвер, открываем веб-страницу
browser = webdriver.Firefox()
browser.get('https://subsidies.qoldau.kz/ru/subsidies/recipients?Year=2020')
Получаем ссылки для переключения страниц.
# Все ссылки на все страницы
pages = browser.find_elements_by_tag_name('div.btn-group ul li')
Получаем текст этих ссылок и записываем его в список.
# Список страниц
pg_list = []
for page in pages:
try:
pg_list.append(int(page.text))
except:
continue
Создаем пустой датафрейм, извлекаем таблицу с каждой страницы с помощью Selenium и записываем в созданный датафрейм.
# Создаем датафрейм и записываем туда все таблицы
table = pd.DataFrame()
for pg in range(min(pg_list),max(pg_list)+1):
pg_link = browser.find_element_by_link_text(str(pg))
pg_link.click()
html=browser.page_source
soup=BeautifulSoup(html,'html.parser')
elem = soup.select_one('table.sw-table-content')
content = pd.read_html(str(elem))
content = pd.DataFrame(content[0])
content.columns = ['Номер', 'Наименование', 'Сумма', 'Полученные субсидии']
table = pd.concat([table, content])
time.sleep(2)
Запишем получившийся результат в XLSX.
# Записываем результат в XLSX
table.to_excel('Получатели субсидий.xlsx')
Примененные функции
- os.chdir
- os.getcwd
- bs4.BeautifulSoup
- list.append
- pandas.DataFrame
- bs4.BeautifulSoup.select_one
- pandas.read_html
- pandas.concat
- time.sleep
- pandas.DataFrame.to_excel