Файлы к уроку:
Описание
В этом уроке мы извлечем однотипные таблицы из множества таблиц одного веб-сайта и объединим их в одну таблицу по вертикали.
Решение
Импортируем нужные модули.
# Импорт модулей
import os
import requests
import bs4
import pandas as pd
from tqdm import tqdm
import time
Укажем рабочую папку.
# Указываем рабочую папку
os.chdir(r'c:\Comrade Excel. Многостраничное извлечение')
os.getcwd()
Создадим список url, из которых будем извлекать таблицы.
# Создаем список url
url = 'http://novosibirsky--nsk.sudrf.ru/modules.php?name=sud_delo&srv_num=1&name_op=r&page={}&vnkod=54RS0030&srv_num=1&name_op=r&delo_id=1540005&case_type=0&new=0&G1_PARTS__NAMESS=&g1_case__CASE_NUMBERSS=&g1_case__JUDICIAL_UIDSS=&delo_table=g1_case&g1_case__ENTRY_DATE1D=01.01.2014&g1_case__ENTRY_DATE2D=31.12.2019&G1_CASE__JUDGE=&g1_case__RESULT_DATE1D=&g1_case__RESULT_DATE2D=&G1_CASE__RESULT=&G1_CASE__BUILDING_ID=&G1_CASE__COURT_STRUCT=&G1_EVENT__EVENT_NAME=&G1_EVENT__EVENT_DATEDD=&G1_PARTS__PARTS_TYPE=&G1_PARTS__INN_STRSS=&G1_PARTS__KPP_STRSS=&G1_PARTS__OGRN_STRSS=&G1_PARTS__OGRNIP_STRSS=&G1_RKN_ACCESS_RESTRICTION__RKN_REASON=&g1_rkn_access_restriction__RKN_RESTRICT_URLSS=&G1_DOCUMENT__PUBL_DATE1D=&G1_DOCUMENT__PUBL_DATE2D=&G1_CASE__VALIDITY_DATE1D=&G1_CASE__VALIDITY_DATE2D=&G1_ORDER_INFO__ORDER_DATE1D=&G1_ORDER_INFO__ORDER_DATE2D=&G1_ORDER_INFO__ORDER_NUMSS=&G1_ORDER_INFO__STATE_ID=&list=ON&Submit=%CD%E0%E9%F2%E8'
urls = []
for item in range(1, 666):
urls.append(url.format(int(item)))
urls[-1]
Передадим параметры headers.
# Передаем браузеру параметры headers
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 YaBrowser/20.9.0.933 Yowser/2.5 Safari/537.36'}
Объединим таблицы в одну большую таблицу.
# Объединяем все в одну таблицу
court_cases = pd.DataFrame()
i = 0
for url in tqdm(urls):
i = i + 1
attempts = 0
while attempts < 100:
try:
time.sleep(1)
source = requests.get(url, headers=headers, timeout=600).text
soup = bs4.BeautifulSoup(source, 'lxml')
table = soup.select_one('#tablcont')
table = pd.read_html(str(table))
table = pd.DataFrame(table[0])
table['Page_Number'] = i
court_cases = pd.concat([court_cases, table])
break
except:
continue
Запишем результат в XLSX.
# Запишем результат в XLSX
court_cases.to_excel('court_cases.xlsx')
Примененные функции
- os.chdir
- os.getcwd
- range
- list.append
- pandas.DataFrame
- tqdm.tqdm
- time.sleep
- requests.get
- bs4.BeautifulSoup
- bs4.BeautifulSoup.select_one
- pandas.read_html
- str
- pandas.concat
- pandas.DataFrame.to_excel