подскажите пожалуйста, получаю страницу, нахожу нужные данные, это таблица.
как разложить данные из таблицы на пару ключ — значение?
с помощью BeautifulSoup
<tr> <td> Принципал </td> <td> МОРТП "АНЗАСТ" </td> </tr>
мой код
import urllib.request import urllib.parse from bs4 import BeautifulSoup url = 'https://fedresurs.ru/messages/4073AEF1951F13998374D373A64CB497' def getpage(lnk): with urllib.request.urlopen(lnk) as response: html = response.read() return html soup = BeautifulSoup(getpage(url)) table = soup.find('table', class_='mesview') # print(table.prettify()) for tr in table.find_all('tr'): print(tr.td)
На выходе получить словарь key:value
Осложняется тем, что в одном tr есть вложенная таблица. Как ее правильно обработать?
Анонимный пользователь Изменен статус публикации
я всё-таки решил сделать вложенный список для бенефициаров, чтобы не терять информацию. Выбрать из этого списка первый элемент очень просто…
import re import requests from bs4 import BeautifulSoup url = 'https://fedresurs.ru/messages/4073AEF1951F13998374D373A64CB497' r = requests.get(url) soup = BeautifulSoup(r.content, 'html.parser') data = {} # iterating tables with the <table class="mesview"> attribute for tab in soup.find_all('table', attrs={'class':['mesview']}): for row in tab.find_all('tr'): tmp = row.find_all('td') if len(tmp) == 2: data[re.sub(r'\s{3,}', '', tmp[0].text.strip())] = \ re.sub(r'\s{3,}', '', tmp[1].text.strip()) bnfcr = [] # iterating table(s) with the <table class="mandatoryAssessmentTable"> attribute for tab in soup.find_all('table', attrs={'class':['mandatoryAssessmentTable']}): # parsing column names from table's headers cols = [col.text for col in tab.find_all('th')] for row in tab.find_all('tr'): tmp = row.find_all('td') if len(tmp) == len(cols): bnfcr.append({cols[0]: tmp[0].text.strip(), cols[1]:tmp[1].text.strip()}) data['Бенефициары'] = bnfcr print(data)
Результат:
{'': 'Изменяемый срок действия', 'Бенефициары': [{'Бенефициар': 'МАДОУ № 13 "УМКА"', 'Идентификаторы': 'ИНН: 5047086394 ОГРН: 1075047010114'}], 'Гарант': 'БАНК "ВОЗРОЖДЕНИЕ" (ПАО)(ИНН: 5000001042, ОГРН: 1027700540680)', 'Дата выдачи': '26.12.2016', 'Дата завершения действия': '02.03.2018', 'Дата начала действия': '26.12.2016', 'МАДОУ № 13 "УМКА"': 'ИНН: 5047086394 ОГРН: 1075047010114', 'Номер гарантии': '063-158-БГ-2016', 'Обстоятельства выплаты': 'Получение требования Бенефициара с указанием, в чем состоит нарушение Принципалом основного обязательства, в обе спечение которого выдана гарантия.', 'Описание основного обязательства': 'Исполнение обязательств по контракту/договору', 'Принципал': 'МОРТП "АНЗАСТ"(ИНН: 5047000703, ОГРН: 1025006178010)', 'Сумма': '947 917.98RUB', 'Тип сообщения': 'Сообщение о выпуске независимой гарантии', 'Торги': '№4от16.12.2016'}