当前位置: 首页 > news >正文

【2026最新携程酒店爬虫分享】用Python批量爬取酒店评论,含回复内容一键保存Excel!

您好,我是@iFeng的小屋,一枚4年程序猿。

一、爬取目标

很多做市场调研或出行规划的朋友,都想深入了解某家酒店的真实口碑。但携程评论页翻来翻去很麻烦,而且酒店的回复内容往往藏在折叠层里,手工复制太累。

所以,我写了这个携程酒店评论爬虫,它能:

  • 根据酒店ID,一键抓取指定页数的评论

  • 获取每条评论的正文、评分、时间、用户名、点赞数、房型、出行类型

  • 自动提取酒店的回复内容,包括回复时间

  • 使用多线程(可调并发数)加速,同时控制请求频率

  • 所有数据直接保存为Excel,规整好用

目前是源码格式,还没有封装成软件,如果想要软件的我后续开发一个软件版本的。

二、展示爬取结果

话不多说,先看成果。爬取结果包含以下字段:

字段:酒店id,正文,评分,评论时间,入住时间,用户名,评论点赞量,评论等级,房间类型名称,旅游类型,回复者,回复内容,回复时间。

字段齐全,可作为后续研究分析使用。

三、原理讲解

  1. 打开携程酒店详情页,按F12进入开发者工具,翻看评论页,找到评论数据的接口。发现是restapi/soa2/33278/getHotelCommentList,POST请求。

  2. 接口请求体是JSON格式,包含hotelId(酒店ID)、pageIndex(页码)、pageSize(每页条数)、orderBy(排序方式)等参数。

  3. requests模拟这个POST请求,带上必要的Headers,就能拿到JSON数据。

  4. 解析JSON中的commentList,提取每条评论的字段。特别注意feedbackList里藏着酒店的回复内容。

  5. 最后用pandas把数据存成Excel。

四、爬虫代码讲解

导入库:

import requests import json import time import pandas as pd from concurrent.futures import ThreadPoolExecutor
3.1 核心思路与配置

需要两个关键参数:酒店ID要爬的页数。酒店ID可以从URL中获取,比如https://hotels.ctrip.com/hotels/878902.html878902就是酒店ID。

为了方便使用,我直接把酒店ID和页数写在脚本末尾,你也可以改成input输入。

python运行

3.2 关键步骤:构造请求与解析数据

这是爬虫的核心,POST请求的构造必须准确:

def fetchComments(hotelId, pageIndex): url = "https://m.ctrip.com/restapi/soa2/33278/getHotelCommentList" headers = { 'Content-type': 'application/json', 'Origin': 'https://hotels.ctrip.com', 'Referer': 'https://hotels.ctrip.com', 'user-agent': 'Mozilla/5.0...' } ... r = requests.post(url, json=formData, headers=headers) data = r.json() comment_list = data.get("data", {}).get("commentList", []) # ... 解析每条评论
3.3 关键步骤:多线程抓取

虽然单线程也能跑,但多线程能让速度翻倍(但要控制并发数,别把网站搞崩了):

def fetchHotelComments(hotelId, numPages=10): all_comments = [] def fetch_page(pageIndex): return fetchComments(hotelId, pageIndex) with ThreadPoolExecutor(max_workers=3) as executor: # 最多3个线程 results = executor.map(fetch_page, range(1, numPages + 1)) for page_comments in results: all_comments.extend(page_comments) time.sleep(1) # 每页间隔1秒,太猛容易被封 return all_comments

四、如何运行?

  1. 安装依赖pip install requests pandas openpyxl

  2. 修改参数:在if __name__ == "__main__":下面,把hotel_id换成你想爬的酒店ID,把total_pages改成你要的页数(每页10条)。

  3. 运行脚本:直接执行,等待结果。

  4. 查看结果:当前目录下会生成comments_酒店ID.xlsx文件。

五、说明

  1. 酒店ID获取:在携程酒店详情页的URL里,比如https://hotels.ctrip.com/hotels/878902.html,数字部分就是酒店ID。

  2. 翻页逻辑:代码目前只爬指定页数,如果你需要爬全部评论,可以先通过第一页的响应获取总条数,再计算总页数,然后循环。为简化示例,这里只演示指定页数。

  3. 请求频率:代码中已经加入了time.sleep,请勿修改太快,以免被网站封IP。

  4. 完整源码:上述代码为核心模块,完整可运行的源码包含更详细的异常处理和注释,已打包整理。

需要本文完整可运行Python源码的小伙伴,我都放在了与此号同名的公主号里,大家自行获取。

持续分享Python干货中!更多爬虫源码干货,请前往主页查看~

http://www.jsqmd.com/news/449604/

相关文章:

  • 企业级智能菜谱推荐系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • vsg 编译
  • 模拟化妆品保质期,输入开封时间,环境温度,预测有效成分衰减,提醒及时更换。
  • TS/JS多智能体开发实战:从单Agent到OpenClaw
  • 文昌美食推荐:南山萝卜煨牛排、脆皮烧鸡与蒜蓉开边虾的高性价比对比攻略
  • 万象熔炉·丹青幻境与ComfyUI工作流整合:可视化节点式创作
  • DeepSeek-OCR部署教程:HTTPS反向代理配置(Nginx)保障Web访问安全
  • 大厂Java面试实战:从电商系统架构设计到分布式系统优化全解析
  • 思考:完全背包-为什么先遍历背包再遍历物品是“排列数”,先遍历物品再遍历背包是“组合数”
  • 深圳AI营销实践复盘,亲测有效
  • Chandra OCR效果展示:老扫描数学题80.3分识别,公式符号+上下标精准还原截图
  • 黑马-产品经理就业班V6.0|价值8980元|2022年|完结无秘
  • Meta-Llama-3-8B-Instruct镜像详解:如何快速搭建并测试对话效果
  • LiuJuan20260223Zimage模型Java客户端开发:从零构建图像生成SDK
  • 【四旋翼控制】基于双环纯P控制器级联 外环调节姿态,内环控制电机推力实现快速干扰抑制和精确设定点跟踪附Matlab代码
  • [原创开源] 三进制/n+1进制芯片底层架构设计思路与实现可行性分析
  • 实力强的高速改扩防撞水泥墩源头厂家盘点 昇顺交通设施厂口碑如何 - 工业品牌热点
  • 职业灭绝倒计时:AI替代率80%的软件测试岗位清单与转型战略
  • 代码随想录算法训练营 Day04 | 链表 part02
  • gte-base-zh GPU部署优化教程:显存占用<2.1GB的轻量级Embedding服务
  • 小白也能懂:Qwen3-Embedding-4B如何帮你快速构建智能问答系统
  • 聊聊2026年江苏靠谱的通过式抛丸机公司,哪家质量优有答案 - mypinpai
  • vLLM优化ERNIE-4.5-0.3B-PT推理:动态角色切换PD解聚与卷积码量化实践
  • 明湾中学阶段:寻找自我,面向未来
  • selenium抓包的具体操作(学习自用)
  • b站视频全自动化爬虫,采用抓包,基于selenium(学习使用)
  • AI模型部署对比:OpenClaw本地部署与星图GPU一键部署DeOldify的优劣分析
  • GME多模态向量-Qwen2-VL-2B创意应用:辅助生成AE视频剪辑的智能标签与片段管理
  • Fish Speech 1.5快速部署:镜像预加载+服务自动恢复机制详解
  • Windows 环境升级 triton-windows 修复 ptxas.exe DLL 崩溃问题