Парсинг сайта с непонятной пагинацией
нужно получить всю информацию о всех торгах с сайта https://torgi.gov.ru/lotSearch1.html, но возникают проблемы с его пагинацией
я собирал ссылки с цифр внизу, проходил по ссылке "вперед", но в цикле всё время парсится только 1-я страница
import requests
from urllib3 import disable_warnings, exceptions
from bs4 import BeautifulSoup
from time import sleep, time
from fake_useragent import UserAgent
from random import randint
#import pandas as pd
disable_warnings(exceptions.InsecureRequestWarning)
def get_content(url, attr=None, retryings=0):
retr = retryings
try:
response = requests.get(url, params=attr, verify=False, headers={'Authorization': 'Token 6ee9c7755faba9a18ac4add5b93d37a7'})
except requests.exceptions.ConnectionError:
print(f'------------------------------------------------------------------------------------------------------------------------\nrequests.exceptions.ConnectionError, get_content({url})\n\nне удалось получить информацию о странице\n\n------------------------------------------------------------------------------------------------------------------------')
quit()
else:
if response.status_code != requests.codes.ok:
if retryings <= 1:
print(f"\nчто-то пошло не по плану...(код состояния HTTP {response.status_code}, страница {url})\nпробуем ещё раз через 0.5с\n")
retr += 1
sleep(0.5)
get_content(url, attr, retr)
else:
print(f"\nничего не изменилось...(код состояния HTTP {response.status_code})\nидем дальше\n")
try:
content = BeautifulSoup(response.text, "html.parser")
except requests.exceptions.ConnectionError as e:
print('------------------------------------------------------------------------------------------------------------------------\nне удалось получить информацию о странице\n------------------------------------------------------------------------------------------------------------------------')
quit()
else:
print(f'------------------------------------------------------------------------------------------------------------------------\nинформация о странице {url} успешно получена\n------------------------------------------------------------------------------------------------------------------------')
return content
else:
content = BeautifulSoup(response.text, "html.parser")
print(f'------------------------------------------------------------------------------------------------------------------------\nинформация о странице {url} успешно получена\n------------------------------------------------------------------------------------------------------------------------')
return content
def parse():
url = "https://torgi.gov.ru/index.html"
content = get_content(url)
hrefs = content.find_all('a', {'class': 'long_working'})
data = {'Организатор торгов': [], 'Номер извещения Тип имущества Площадь': [], 'Описание и тех. хар-ки': [], 'Местоположение': [], 'Начальная цена срок действия и вид договора': [], 'Ежемес. плата за объект': []}
last_data = data
for h in hrefs[1:]:
url = "https://torgi.gov.ru/" + h['href']
page_cont = get_content(url)
if page_cont.find('a', {'title': "Перейти на одну страницу вперед"}):
for page in range(int(page_cont.find('a', {"title": "Перейти на последнюю страницу"}).text))[1:]:
print(f"page - {page}")
spans_left = page_cont.find_all('td', {'class': 'datacell left'})
for sp in spans_left:
for s in sp:
span_text = str(s)[len("<span>") : len(s)-len("</span>")-1].split(" ")
temp = ""
for e in range(len(span_text)):
if not e == len(span_text)-1:
temp += span_text[e] + " "
else:
temp += span_text[e]
data['Организатор торгов'].append(temp)
data['Организатор торгов'] = list(filter(None, data['Организатор торгов']))
print(data['Организатор торгов'][0])
print(data['Организатор торгов'][len(data['Организатор торгов'])-1])
next_page_url = f"https://torgi.gov.ru/lotSearch1.html?wicket:interface=::search_panel:resultTable:list:bottomToolbars:2:toolbar:span:navigator:navigation:{page}:pageLink::IBehaviorListener:0:-1&random=0.{randint(10 ** 17, 99 ** 17)}"
page_cont = get_content(next_page_url)
return data
d = parse()