我试图抓取一些电影评论的评级,但评级不是一个数字,但它是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
如果你有任何问题请告诉我