Здравствуйте, есть сайт
https://etender.gov.az
и там есть таблица с данными и ссылками, и после перехода по ссылкам(текст "Ətraflı"), структура данных может сильно отличатся(в том числе таблицы в разных страницах).
Вот пример:
https://etender.gov.az/main/competition/detail/315080
https://etender.gov.az/main/competition/detail/232454
И мне это все нужно спарсинговать в словарь(только те данные что в этих страницах), я хотел использовать URL с GET параметром, но там иногда бывает много ненужной информации и некоторые тексты пишутся с ошибками. Как мне сделать такой парсинг?
Также возможно мой код пригодится(он не совсем полный):
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Я сначала думал что все данные по одному шаблону(примерно такому)
all_data = {
'Satınalan təşkilatın adı': [],
'Satınalma predmeti': [],
'Satınalma predmeti': [],
'Dərc edilmə tarixi': [],
'Bitmə tarixi': [],
'Link': {
'Satınalan təşkilatın adı': [],
'Satınalan təşkilatın VÖEN-i': [],
'Satınalan təşkilatın ünvanı': [],
'Musabiqənin adı': [],
'Müsabiqənin nömrəsi': [],
'Təsnifat kodu': [],
'Ehtimal olunan qiymət': [],
'Müsabiqənin dərc edilmə tarixi və vaxtı': [],
'Təkliflərin son təqdim olunma tarixi və vaxtı': [],
'Zərflərin açılış tarixi və vaxtı': []
},
'Linkdəki çərçivə':{
'Başlıq': [],
'Açıqlama': [],
'Miqdar': [],
'Ölçü vahidi': []
}
}
def get_general_info(api_link = 'https://etender.gov.az/api/events?EventType=2&PageSize=1&PageNumber=1&EventStatus=1&Keyword=&buyerOrganizationName=&PrivateRfxId=&publishDateFrom=&publishDateTo=&AwardedparticipantName=&AwardedparticipantVoen=&DocumentViewType='):
responce = requests.get(api_link)
general_info = []
if responce.status_code == 200:
data = responce.json()
current_page = data['currentPage']
total_pages = data['totalPages']
items_on_page = data['itemsInPage']
total_items = data['totalItems']
general_info.append(current_page)
general_info.append(total_pages)
general_info.append(items_on_page)
general_info.append(total_items)
return general_info
print(f'Error: {responce.status_code}')
return general_info
# возвращает айди каждлго тендера в таблице
def get_all_events_ids(page_size):
api_link = f'https://etender.gov.az/api/events?EventType=2&PageSize={page_size}&PageNumber=1&EventStatus=1&Keyword=&buyerOrganizationName=&PrivateRfxId=&publishDateFrom=&publishDateTo=&AwardedparticipantName=&AwardedparticipantVoen=&DocumentViewType='
response = requests.get(api_link)
data = response.json()
events_ids = []
for item in data['items']:
events_ids.append(item['eventId'])
return events_ids
# используя фунуцию get_all_events_ids(), возвращает всю информацию о тендере (шаблон ссылки https://etender.gov.az/main/competition/detail/tender_id)
def get_info_from_link(ids):
all_data = {}
row_data = []
driver = webdriver.Chrome()
for i in range(len(ids)):
link = f'https://etender.gov.az/main/competition/detail/{ids[i]}'
driver.get(link)
... # код пока что не завершен
driver.quit()
return all_data