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

新手求助:使用BeautifulSoup爬取TripAdvisor景点评论无输出问题排查

排查TripAdvisor爬虫无输出问题的思路和解决方案

作为爬过TripAdvisor的过来人,我来帮你一步步捋清楚问题所在:

第一步:先确认请求是否真的成功

你代码里打印了req.status_code,先看这个输出值:

  • 如果是403 Forbidden:说明TripAdvisor的反爬机制拦住了你的请求。虽然你加了User-Agent,但可能不够贴近真实浏览器,或者需要补充Referer这类请求头,建议换成你当前正在用的浏览器的最新UA(可以通过「浏览器设置→关于浏览器」查看版本,再找对应的UA字符串)。
  • 如果是200 OK:那请求没问题,问题出在页面元素的定位上。

第二步:检查元素定位的class是否失效

TripAdvisor的页面结构经常会更新,你用的XllAv H4 _a这个class大概率已经过期了。你可以手动打开目标页面,右键点击任意一条评论的标题,选择「检查」,查看当前评论标题的正确class:

  • 目前(2024年),TripAdvisor的评论标题对应的class是QewHA H4 _a,评论内容对应的class是fIrGe _T。
  • 另外,建议先定位评论列表的父容器(比如带data-test-target="reviews-tab"属性的div),再在里面找子元素,这样能避免匹配到页面上的无关元素。

修改后的可运行示例代码

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
    'Referer': 'https://www.tripadvisor.co.uk/'
}

url = "https://www.tripadvisor.co.uk/Attraction_Review-g304141-d4782530-Reviews-Sigiriya_The_Ancient_Rock_Fortress-Sigiriya_Central_Province.html"

try:
    req = requests.get(url, headers=headers, timeout=10)
    print("请求状态码:", req.status_code)
    
    if req.status_code == 200:
        soup = BeautifulSoup(req.content, 'html.parser')
        
        # 先定位评论列表的父容器,缩小查找范围
        review_container = soup.find('div', {'data-test-target': 'reviews-tab'})
        if not review_container:
            print("未找到评论容器,可能页面结构已更新,请重新检查元素")
        else:
            # 提取所有评论标题和内容
            review_titles = review_container.find_all(class_="QewHA H4 _a")
            review_contents = review_container.find_all(class_="fIrGe _T")
            
            print("\n=== 爬取到的评论 ===")
            for idx, (title, content) in enumerate(zip(review_titles, review_contents), 1):
                print(f"\n评论{idx}:")
                print(f"标题:{title.get_text(strip=True)}")
                print(f"内容:{content.get_text(strip=True)}")
    else:
        print(f"请求失败,状态码:{req.status_code},请检查请求头或网络环境")
except Exception as e:
    print(f"请求过程出错:{str(e)}")

额外提醒

  • 如果运行后只拿到几条评论,那是因为TripAdvisor用了动态加载(滚动页面才会加载更多评论),这种情况下requests就不够用了,需要用Selenium或Playwright模拟浏览器滚动来获取完整内容。
  • 频繁爬取容易被封IP,建议每次请求后加个2-3秒的延迟(import time后用time.sleep(2)),或者考虑用代理IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:44:07