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

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

如果您有任何问题,请告诉我