将一些评论的评分抓取为图片
Scraping the rating of some reviews as pictures
我正在尝试抓取一些电影评论的评分,但评分不是一个数字,而是 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
如果您有任何问题,请告诉我
我正在尝试抓取一些电影评论的评分,但评分不是一个数字,而是 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
如果您有任何问题,请告诉我