网页爬取技术咨询:如何提取星级评分中的最高星级
爬取AirlineQuality网站星级的解决方案
核心思路
不用纠结星级元素的具体class数值(1、2、3这类),直接统计页面中处于填充状态的星级元素总数,这个总数就是对应评论的最高星级。
具体实现方法
1. 使用BeautifulSoup(Python)
假设页面中填充的星级元素带有统一的fill类标识(比如网站实际结构为<span class="star fill 1">、<span class="star fill 2">),通过选择所有填充元素计数即可:
from bs4 import BeautifulSoup import requests url = "https://www.airlinequality.com/airline-reviews/british-airways/page/1/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # 选中所有填充状态的星级元素 filled_stars = soup.select("span.star.fill") # 元素数量即为最高星级 max_rating = len(filled_stars) print(f"最高星级: {max_rating}")
如果填充星级通过aria-label属性标识(比如包含"filled"关键词),可调整选择器:
filled_stars = soup.select('span[aria-label*="filled"]') max_rating = len(filled_stars)
2. 使用Scrapy框架
在Scrapy爬虫中,用CSS或XPath选择器直接统计:
def parse(self, response): # CSS选择器统计填充星级 max_rating = len(response.css("span.star.fill")) # 或用XPath写法 max_rating = len(response.xpath('//span[contains(@class, "star") and contains(@class, "fill")]')) yield {"max_rating": max_rating}
3. 批量处理多条评论
若页面包含多条评论,需遍历每个评论块单独统计:
# BeautifulSoup遍历评论块 reviews = soup.find_all("div", class_="review-stats") for review in reviews: filled_stars = review.select("span.star.fill") max_rating = len(filled_stars) print(f"该评论星级: {max_rating}")
内容的提问来源于stack exchange,提问作者Adi Wira
相关产品推荐
相关产品推荐

