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

Python中XPath提取booking.com评论返回空列表,如何解决?

Booking.com酒店评论爬取返回空结果的排查方案

第一步:排查请求逻辑错误

  • 你代码中直接调用URL.content属于语法错误:你定义的URL是字符串类型,不存在content属性。需要先使用网络请求库获取页面响应,同时必须添加请求头模拟浏览器,避开Booking的基础反爬策略,示例正确请求代码如下:
import requests
import lxml.html

URL = "https://www.booking.com/hotel/ph/oyo-518-mytown-amsterdam-manila.en-gb.html?label=gen173nr-1DCAEoggI46AdIM1gEaLQBiAEBmAEJuAEHyAEN2AED6AEBiAIBqAIDuALwtZuKBsACAdICJDZiZTlhNTRlLTc5MzktNGIwNC05NmZjLWI4Nzg3NGZhNWQ1MtgCBOACAQ;all_sr_blocks=601616502_275784337_2_0_0;checkin=2021-10-01;checkout=2021-10-02;dest_id=-2437894;dest_type=city;dist=0;group_adults=2;group_children=0;hapos=1;highlighted_blocks=601616502_275784337_2_0_0;hpos=1;no_rooms=1;room1=A%2CA;sb_price_type=total;sr_order=popularity;sr_pri_blocks=601616502_275784337_2_0_0__139646;srepoch=1632033539;srpvid=af482ec1c5c20263;type=total;ucfs=1&#tab-reviews"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept-Language": "en-GB,en;q=0.9"
}
resp = requests.get(URL, headers=headers)
# 先确认响应状态码为200,若为403/404说明请求被拦截或链接已失效
print(resp.status_code)
tree = lxml.html.fromstring(resp.text)
  • 额外注意你使用的URL中包含2021年的时效参数(checkin日期、srepoch时间戳等),大概率已经失效,建议从浏览器重新复制当前有效的酒店评论页链接再测试。

第二步:排查页面内容是否匹配

  • Booking的评论属于懒加载动态内容,默认请求初始页面不会返回完整评论列表。你可以将获取到的页面源码写入本地HTML文件打开查看,确认源码中是否存在review_list_page_container元素:
with open("test.html", "w", encoding="utf-8") as f:
    f.write(resp.text)
  • 如果本地打开的HTML文件中没有评论内容,说明评论是异步加载的,无法直接通过静态HTML解析获取。

第三步:排查XPath有效性

  • 浏览器复制的全路径XPath稳定性极低,浏览器中展示的DOM是JS执行后的最终结构,和你请求拿到的原始HTML结构可能存在差异,全路径只要有一个节点结构变动就会匹配失败。建议简化XPath使用模糊匹配规则,先测试能否命中评论容器:
# 先匹配所有评论项
reviews = tree.xpath('//div[contains(@class, "review-card")]')
print(len(reviews))
# 确认能匹配到评论后,再逐层提取对应字段

最终解决方案

  1. 若静态页面已包含评论内容:优化XPath使用类名、属性等模糊匹配规则,替换浏览器复制的全路径XPath即可。
  2. 若评论为动态加载:
    • 方案一:使用Selenium、Playwright等浏览器自动化工具,模拟页面滚动加载完整评论后再解析DOM。
    • 方案二:打开浏览器开发者工具的网络面板,筛选XHR/ Fetch请求,找到评论数据的异步接口,直接请求接口获取结构化的JSON格式评论数据,效率远高于解析HTML。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:45:04