使用BeautifulSoup从网站抓取数据时出现问题

时间:2019-05-08 14:13:05

标签: python beautifulsoup python-requests screen-scraping

我正在尝试从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 :(得分:0)

其背后的原因是,网站异步加载了大多数内容,因此您必须查看它发送到服务器的http请求,以便在加载页面布局后加载页面内容。您可以在浏览器的“网络”部分中找到它们(F12键)。 例如,他们用来加载评分的api之一就是:

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

答案 1 :(得分:0)

您可以从另一个标签获取加权平均值

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)