抓取一些评论的评分作为图片



我试图抓取一些电影评论的评级,但评级不是一个数字,但它是10个不同的图像之一,从显示空星到满星。

这是我从中抓取数据的网站:https://www.cinemagia.ro/filme/avatar-17818/reviews/?pagina=1& order_direction = DESC

这是我的代码:

import requests
from bs4 import BeautifulSoup
url = 'https://www.cinemagia.ro/filme/avatar-17818/reviews/?pagina=1&order_direction=DESC'
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
rating=0
scraped_ratings = soup.find_all('span', class_='stelutze').find=("img")
for i in scraped_ratings:
if "star_full.gif" in i.get("src"):
rating += 1
print(rating)

有人帮我写了这段代码,但它只给出了第一次评论的评级。

rating=0
rawRating = soup.find("span", {"class": "stelutze"}).find_all("img")
for i in rawRating:
if "star_full.gif" in i.get("src"):
rating += 1
print(rating)

我试图将代码更改为:

rating=0
count=0
rawRating = soup.find_all("span", {"class": "stelutze"}).find_all("img")
for i in rawRating:
if "star_full.gif" in i.get("src"):
rating += 1
count+= 1
if count == 10:
print(rating)
rating=0
count=0

但是我得到这个错误:AttributeError: ResultSet object has no attribute 'find_all'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?

我想这是因为我不能在同一个语句中使用两个find_all。

帮忙吗?

更新。现在代码看起来像这样:

import requests
from bs4 import BeautifulSoup
pageNum = 1
for k in range (1,17):
url = f'https://www.cinemagia.ro/filme/avatar-17818/reviews/?pagina={pageNum}&order_direction=DESC'
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
scraped_movies = soup.find_all('div', class_='left comentariu')
movies = []
for movie in scraped_movies:
movies.append(movie.get_text().strip())
reviewCount = -1
rating = 0
count = 0
rawRatings = soup.find_all("span", {"class": "stelutze"})
for i in rawRatings:
rawRating = i.find_all("img")
for j in rawRating:
if "star_full.gif" in j.get("src"):
rating += 1
count += 1
if count == 10:
reviewCount += 1
print(rating)
print(movies[reviewCount])
rating = 0
count = 0
pageNum += 1

唯一的问题是:在电影中,我有所有的评论,但不是所有的评论都有一个评级。在RawRatings中有所有的评级。我想打印每个评级,然后是相应的评论,但是当我遇到没有评级的评论时,我只会给出下一个评级,从那时起就把所有东西都搞砸了。

谁知道如何查看电影中的电影是否没有评级?这样我就可以将reviewCount增加2而不是1

我相信这应该能解决你的问题,我还没有测试过,但我不明白为什么它不应该工作。

基本上,当你执行find_all时,你会得到它找到的所有元素的列表。它首先获取页面上的每条评论,然后迭代每条评论,获取每条评论的所有图像,就像你之前做的那样。

rating=0
count=0
rawRatings = soup.find_all("span", {"class": "stelutze"})
for i in rawRatings:
rawRating = i.find_all("img")
for j in rawRating:
if "star_full.gif" in j.get("src"):
rating += 1
count += 1
if count == 10:
print(rating)
rating = 0
count = 0

如果你有任何问题请告诉我

最新更新