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

Yelp评论爬取:JSON文件缺失用户名的问题排查与解决

问题:Yelp评论爬虫无法获取用户名,JSON输出无用户名字段

你遇到的问题和用户名是否是链接无关——因为你调用的是Yelp的review_feed接口(返回JSON数据),而非直接解析HTML页面。问题出在接口返回的JSON结构中,用户名不在username字段。

原因分析

查看该接口返回的JSON数据,用户信息嵌套在user对象里,用户名对应的字段是name,而非你代码中使用的username。所以r.get('username')会返回None,最终显示为Anonymous。

解决方案

修改获取用户名的代码逻辑,从r['user']['name']中提取:

import requests
from bs4 import BeautifulSoup
import json

url = "https://www.yelp.ie/biz/diwali-indian-restaurant-dublin"
review_url = "https://www.yelp.ie/biz/{biz_id}/review_feed?rl=en&q=&sort_by=relevance_desc&start={start}"
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0'}

soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')
biz_id = soup.select_one('[name=yelp-biz-id]')['content']

reviews = []

for start in range(0, 20, 10):  # <-- increase this range for loading more reviews
    r_url = review_url.format(biz_id=biz_id, start=start)
    data = requests.get(r_url, headers=headers).json()
    for r in data['reviews']:
        review_text = BeautifulSoup(r['comment']['text'], 'html.parser').text
        # 修改这里:从user对象的name字段取用户名
        author = r['user'].get('name', 'Anonymous')
        date = r['localizedDate']
        score = r['rating']
        reviews.append({"author": author, "date": date, "review_text": review_text, "score": score})

with open('reviews.json', 'w') as f:
    json.dump(reviews, f, indent=4)

额外提示

如果不确定接口返回的字段结构,可以在代码中临时添加print(r)来查看完整的单条评论数据,确认字段路径是否正确。

内容的提问来源于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 01:38:16