Помогите исправить ошибку с библиотекой BeautifulSoup

import requests
from bs4 import BeautifulSoup

url = 'https://www.kinopoisk.ru/lists/movies/top250/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
link = soup.find().find('div', class_='styles_root__ti07r')
.find('a', class_='styles_poster__gJgwz styles_root__wgbNq')
.get('href')

Выдаёт ошибку:

AttributeError: Traceback (most recent call last): File "D:\Education\Myself\parser.py", line 8, in .find('a', class_='styles_poster__gJgwz styles_root__wgbNq')
AttributeError: 'NoneType' object has no attribute 'find'


Ответы (1 шт):

Автор решения: Marchello A

Вот так это должно выглядеть:

import requests
from bs4 import BeautifulSoup

url = 'https://www.kinopoisk.ru/lists/movies/top250/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
link = soup.find_all('div', class_='styles_root__ti07r')
soup_href = BeautifulSoup(str(link), 'lxml')
list_a = soup_href.find_all('a', class_='styles_poster__gJgwz 
styles_root__wgbNq')
link_list = ['https://www.kinopoisk.ru/'+ link.get('href') for link in list_a]

link_list список с ссылками. Но проблема в том что через библиотеку request вы попадёте на страницу защиты в виде капчи. Код выше вы можете проверить сохранив код страницы просто в файл 'kino.txt'. Я проверил ссылки вытаскивает. Чтобы обойти капчу вам нужно через браузер осуществлять вход, а затем уже запросы библиотеки request python. Подробности уже не помню, но гуглите, там есть модули которые это делают и инструкции. Вот версия если сохранить код страницы в текстовый файл:

from bs4 import BeautifulSoup  

file_name = 'kino.txt'
text = open(file_name, 'r', encoding='utf-8').read()
soup = BeautifulSoup(text, 'lxml')
link = soup.find_all('div', class_='styles_root__ti07r')
soup_href = BeautifulSoup(str(link), 'lxml')
list_a = soup_href.find_all('a', class_='styles_poster__gJgwz styles_root__wgbNq')
link_list = ['https://www.kinopoisk.ru/'+ link.get('href') for link in list_a]
→ Ссылка