Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- from concurrent.futures import ThreadPoolExecutor
- import pandas as pd
- import requests
- from bs4 import BeautifulSoup
- TABLE_NAME = 'output.xlsx'
- def get_lab_name(link):
- while True:
- try:
- response = requests.get(link)
- soup = BeautifulSoup(response.content, 'html.parser')
- element = soup.find('div', class_='gost-form__label', string='Наименование')
- lab_name = element.find_next_sibling('div').text
- return lab_name
- except requests.RequestException as e:
- print(f"Ошибка при загрузке страницы: {e}")
- time.sleep(1)
- except AttributeError: # в случае если каким то образом на странице не будет name
- return ''
- url = 'https://www.rst.gov.ru/portal/gost/home/activity/compliance/evaluationcompliance/AcknowledgementCorrespondence/safetycertificate018?portal:componentId=ff119059-8bd4-47fc-95f6-a70de17a4b3e&portal:isSecure=false&portal:portletMode=view&navigationalstate=JBPNS_rO0ABXdgAAhwYWdlU2l6ZQAAAAEAAjIwAAdvcmRlckJ5AAAAAQAYZGF0ZW9maXNzdWVvZmNlcnRpZmljYXRlAARmcm9tAAAAAQABMAAFb3JkZXIAAAABAARERVNDAAdfX0VPRl9f'
- page_number = 1
- max_pages = 2 # сколько страниц парсить
- data = []
- while page_number <= max_pages:
- while True:
- try:
- response = requests.get(url)
- soup = BeautifulSoup(response.content, 'html.parser')
- break
- except requests.RequestException as e:
- print(f"Ошибка при загрузке страницы: {e}")
- time.sleep(1)
- table = soup.find('table')
- with ThreadPoolExecutor(max_workers=5) as executor: # можно ли макс воркерс поставить 9999 ?????
- for row in table.find_all('tr')[1:]:
- cells = row.find_all('td')
- link = cells[2].find('a')['href']
- lab_name_future = executor.submit(get_lab_name, link)
- column1 = cells[0].text.strip()
- column2 = cells[1].text.strip()
- column3 = cells[2].text.strip()
- column4 = cells[3].text.strip()
- column5 = cells[4].text.strip()
- column6 = cells[5].text.strip()
- lab_name = lab_name_future.result()
- data.append({'Ссылка': link, 'Лаборатория': lab_name, 'Марка': column1, 'Шасси': column2, 'Номер': column3,
- 'Дата': column4, 'Эко класс': column5, 'Примечание': column6})
- next_button = soup.find('a', string='Вперед →') # Найти ссылку на следующую страницу
- if next_button:
- url = next_button['href'] # обновить юрл для некст страницы
- print(f'спарсил страницу {page_number} из {max_pages}')
- page_number += 1 # счетчик +
- else:
- break # если ссылка на следующую страницу не найдена, выйти из цикла, но наверное неверно
- df = pd.DataFrame(
- data) # мб сделать как то сохранение после перехода к след странице чтобы не сильно грузить озу ну и наверное должно быстрее воркать
- df.to_excel(TABLE_NAME, index=False)
Advertisement
Add Comment
Please, Sign In to add comment