【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。

四、爬虫代码讲解

导入库:

python 复制代码
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请求的构造必须准确:

python 复制代码
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 关键步骤:多线程抓取

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

python 复制代码
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干货中!更多爬虫源码干货,请前往主页查看~

相关推荐
灯澜忆梦19 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-19 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-19 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白20 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
麻雀飞吧21 小时前
最新量化学习路径,交易认知和技术实现要并行
人工智能·python
段一凡-华北理工大学1 天前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe1 天前
C++——多态
开发语言·c++
心平气和量大福大1 天前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_1 天前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸1 天前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++