Парсинг на python в excel
друзья, получил задание сделать парсер сайта https://www.list-org.com, на моменте, где нужно, чтобы данные парсились в excel застопорился. Есть желающие помочь?
import requests
from bs4 import BeautifulSoup
from tabulate import tabulate
import pandas as pd
def load_page(url = 'http://www.list-org.com/company/5553931'):
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'}
if not url.startswith('http'):
return None
response = requests.get(url, headers=headers)
print(response)
if not response.ok:
return None
return response.text
def get_company_data(text):
soup = BeautifulSoup(text, 'html.parser')
company_data = soup.find_all('div', {'class': 'c2m'})
return company_data
def parse_data(text):
company_info_dict = dict.fromkeys(['company_name',
'chief_name',
'registration_date',
'status',
'inn',
'kpp',
'ogrn'])
general_text = text[0]
additional_text = text[2]
company_name = general_text.find('a', {'class': 'upper'}).text
company_info_dict['company_name'] = company_name
general_items = general_text.find_all('tr')
additional_items = additional_text.find_all('p')
for item in general_items:
splited_item = item.text.split(':', 1)
key = splited_item[0]
value = splited_item[1]
if key == 'Полное юридическое наименование':
company_info_dict['company_name'] = value
elif key == 'Руководитель':
company_info_dict['chief_name'] = value
elif key == 'Дата регистрации':
company_info_dict['registration_date'] = value
elif key == 'Статус':
company_info_dict['status'] = value
for item in additional_items:
splited_item = item.text.split(':', 1)
key = splited_item[0]
value = splited_item[1]
if key == 'ИНН':
company_info_dict['inn'] = value.strip()
elif key == 'КПП':
company_info_dict['kpp'] = value.strip()
elif key == 'ОГРН':
company_info_dict['ogrn'] = value.strip()
return company_info_dict
#######################################################
def getOrgData(url):
text = load_page(url)
# !! get_company_data и parse_data нужно изменить так, чтобы они возвращали
# лишь нужные данные (см.ниже)
company_data = get_company_data(text)
company_info_dict = parse_data(company_data)
# Здесь возвращаются нужные для экселя данные(Статус, Численность, Основной и Доходы соответственно)
return {'State': company_info_dict['State'], 'People_amount' : company_info_dict['People_amount'], 'Core' : company_info_dict['Core'], 'Income' : company_info_dict['Income']}
MAIN_URL = 'http://www.list-org.com/company/'
def main():
# Получаете экселевский файл
data = pd.read_excel('./parsng.xlsx')
# Вытягиваете из него все ИНН
INNarr = data['ИНН / ЕДРПОУ(Укр) пользователя'].to_list()
# Начинайте идти по всем ИНН
for i in range (len(INNarr)):
url = MAIN_URL + str(INNarr[i])
text = getOrgData(url)
if (text) is None:
print('Не удалось загрузить страницу {}'.format(url))
#Цикл продолжается
continue
data.loc[i]['Статус'] = text['State']
data.loc[i]['Численность персонала'] = text['People_amount']
data.loc[i]['Core'] = text['Core']
data.loc[i]['Income'] = text['Income']
data.to_excel('./gotovo.xlsx')
if __name__ == '__main__':
main()```