You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫抓取Yelp评论无法写入JSON,请求排查修改

解决Yelp.ie爬虫无评论数据的问题

核心问题分析

你的代码无报错但抓不到数据,根源在三个地方:

  • 未模拟浏览器请求:Yelp会拦截无浏览器标识的请求,返回的页面不含评论内容
  • 元素选择器失效:Yelp页面的class类名已更新,原代码里的card-item js-product-data等选择器匹配不到任何元素
  • 分页URL格式错误:Yelp的分页参数不是/review/p{page},正确分页需用start参数控制

修改后的完整代码

import requests
from bs4 import BeautifulSoup
import json

url = "https://www.yelp.ie/biz/diwali-indian-restaurant-dublin"
reviews = []
num_pages = 5

# 模拟浏览器请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

for page in range(num_pages):
    # 计算起始偏移量,Yelp每页默认20条评论
    start = page * 20
    review_url = f"{url}?start={start}"
    
    response = requests.get(review_url, headers=headers)
    # 检查请求是否成功,避免无效页面解析
    if response.status_code != 200:
        print(f"第{page+1}页请求失败,状态码:{response.status_code}")
        continue
    
    soup = BeautifulSoup(response.content, "html.parser")
    # 匹配当前页面的所有评论容器
    review_list = soup.find_all("div", class_="review__09f24__oHr9V border-color--default__09f24__NPAKY")
    
    for review in review_list:
        # 提取作者名称
        author = review.find("a", class_="css-19v1rkv").text.strip()
        # 提取评论日期
        date = review.find("span", class_="css-chan6m").text.strip()
        # 提取评论文本
        text = review.find("p", class_="comment__09f24__gu0rG css-qgunke").text.strip()
        # 从图片alt属性提取评分(比如"5.0 star rating")
        score_img = review.find("img", class_="css-1q2nwpv")
        score = score_img["alt"].split()[0] if score_img else "无评分"
        
        reviews.append({
            "author": author,
            "date": date,
            "text": text,
            "score": score
        })

# 保存时指定编码,避免中文乱码
with open("reviews.json", "w", encoding="utf-8") as outfile:
    json.dump({"reviews": reviews}, outfile, indent=4, ensure_ascii=False)

关键修改说明

  • 添加请求头:通过User-Agent模拟浏览器请求,绕过Yelp的基础反爬拦截
  • 修正分页逻辑:用start参数控制分页(第n页对应start=(n-1)*20),替换原错误的分页URL格式
  • 更新元素选择器:根据当前Yelp页面的实际class类名,重新编写了评论容器、作者、日期、文本、评分的匹配规则
  • 增加请求校验:对请求状态码做检查,避免无效页面解析导致的异常
  • 优化JSON保存:添加encoding="utf-8"和ensure_ascii=False,确保特殊字符正常保存

注意事项

  • Yelp页面结构可能随时更新,若后续再次抓不到数据,需重新审查页面元素的class类名
  • 控制请求频率,避免频繁访问触发IP封禁

内容的提问来源于stack exchange,提问作者MISHA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:43:11