Проблема с очисткой данных с сайта с BeautifulSoup - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь взять рейтинг фильма с сайта Letterboxd. Я использовал такой код на других веб-сайтах, и он работал, но он не получает нужную мне информацию с этого веб-сайта.

import requests
from bs4 import BeautifulSoup
page = requests.get("https://letterboxd.com/film/avengers-endgame/")
soup = BeautifulSoup(page.content, 'html.parser')
final = soup.find("section", attrs={"class":"section ratings-histogram- 
chart"})
print(final)

Это ничего не печатает, но на сайте есть тег для этого класса, и информация, которую я хочу, находится под ним.

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Вы можете получить средневзвешенное значение из другого тега

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://letterboxd.com/film/avengers-endgame/')
soup = bs(r.content, 'lxml')
print(soup.select_one('[name="twitter:data2"]')['content'])

Текст всей гистограммы

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://letterboxd.com/csi/film/avengers-endgame/rating-histogram/')
soup = bs(r.content, 'lxml')
ratings = [item['title'].replace('\xa0',' ') for item in soup.select('.tooltip')]
print(ratings)
0 голосов
/ 08 мая 2019

Причиной этого является то, что веб-сайт загружает большую часть контента асинхронно, поэтому вам придется просматривать http-запросы, которые он отправляет на сервер, чтобы загрузить содержимое страницы после загрузки макета страницы. Вы можете найти их в разделе «сеть» в браузере (клавиша F12). Например, один из API-интерфейсов, которые они используют для загрузки рейтинга, это:

https://letterboxd.com/csi/film/avengers-endgame/rating-histogram/

...