Помогите исправить ошибку с библиотекой 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 шт):
Вот так это должно выглядеть:
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]