Не могу спарсить таблицу с сайта - Can't parsing table from site -

Рейтинг: -4Ответов: 2Опубликовано: 18.05.2023

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)

Ответы

▲ 1
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
▲ 0

Проблема в том, что BS4 не находит таблицу и соответственно дальше не может выполнять методы поиска.

soup.find('table')

Ищет элемент с тэгом table, вы же указываете id элемента, являющегося div, внутри указанного вами дива находится необходимая таблица. Поэтому вам достаточно поменять строку:

table1 = soup.find('table', id='rrp_table_wrapper')

на:

table1 = soup.find('table', class_='rrp_table')