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

相关推荐
2601_96238243几秒前
Python零基础入门,看完直接上手写代码
python·机器学习·编程语言·数据科学·入门教程
信誓旦旦的程序猿1 分钟前
【零依赖量化数据实战 #25】北交所技术指标与基本面
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
2601_966949653 分钟前
Python 量化开发为什么适合使用金融数据 SDK?从数据获取到策略研究的工程化实践
开发语言·python·数据分析·量化交易·股票数据·quantdash
科技小E4 分钟前
训完怎么带走?AI模型私有化部署平台DLTM模型导出ONNX/PyTorch与离线部署跑遍产线边缘
人工智能·pytorch·python
晓窗科技4 分钟前
专业的AI基座公司
人工智能·python
万年咸鱼5 分钟前
Java ArrayList 详解:原理、用法与实战
java·开发语言·windows
花间相见5 分钟前
【LangChain组件02】—— create_agent函数详解
python
长友cy9 分钟前
Qt官方示例Application源码阅读
开发语言·qt
程序员良辰16 分钟前
服务器 JDK 环境变量配置:一键安装和手动配置有什么区别?
开发语言·python