Не могу спарсить таблицу с сайта - Can't parsing table from site -
https://raex-rr.com/ESG/ESG_companies/ESG_rating_companies/2023.5/
need to parsing table from website get error: 'NoneType' object has no attribute 'find_all'
code:
url = 'https://raex-rr.com/ESG/ESG_companies/ESG_rating_companies/2023.5/'
page = requests.get(url)
print(page.status_code)
soup = BeautifulSoup(page.text, 'lxml')
soup
table1 = soup.find('table', id='rrp_table_wrapper')
table1
# Obtain every title of columns with tag <th>
headers = []
for i in table1.find_all('th'):
title = i.text
headers.append(title)
Ответы (2 шт):
Автор решения: Ret7020
→ Ссылка
Проблема в том, что BS4 не находит таблицу и соответственно дальше не может выполнять методы поиска.
soup.find('table')
Ищет элемент с тэгом table, вы же указываете id элемента, являющегося div, внутри указанного вами дива находится необходимая таблица.
Поэтому вам достаточно поменять строку:
table1 = soup.find('table', id='rrp_table_wrapper')
на:
table1 = soup.find('table', class_='rrp_table')
Автор решения: Namerek
→ Ссылка
from requests_toolbelt.sessions import BaseUrlSession
from bs4 import BeautifulSoup as Soup
import pandas as pd
s = BaseUrlSession('https://raex-rr.com')
response = s.get('ESG/ESG_companies/ESG_rating_companies/2023.5')
soup = Soup(response.content, 'html.parser')
df, = pd.read_html(str(soup.select_one('#rrp_table_wrapper')))
| № | Название | Код MOEX | Подотрасль | ESG Rank | ESG-рейтинг | E Rank | E-рейтинг | S Rank | S-рейтинг | G Rank | G-рейтинг | Год последней оцененной отчетности |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | НЛМК | NLMK | Чёрная металлургия | 1 | AA | 2 | AA | 2 | AA | 21 | A | 2021 |
| 2 | «Полюс» | PLZL | Драгоценные металлы | 2 | AA | 1 | AAA | 14 | A | 27 | A | 2021 |
| 3 | «Уралкалий» | — | Агрохимикаты | 3 | A | 6 | BBB | 1 | AA | 6 | AA | 2021 |
| 4 | «Энел Россия» | ENRU | Электроэнергетика | 4 | A | 9 | BBB | 9 | A | 2 | AAA | 2021 |