抖音搜索页数据批量爬取,多关键词同步采集实现

简介: 抖音搜索页数据批量爬取,多关键词同步采集实现

在短视频行业数据分析、竞品监测、内容趋势研究等实际业务场景中,抖音搜索页数据是极具价值的信息源,包含视频标题、博主信息、点赞量、评论量、发布时间等核心数据。传统手动复制搜索结果的方式效率极低,无法满足批量、多关键词、高频次的数据采集需求。
本文将从技术原理、环境搭建、核心代码实现、多关键词同步采集、反爬规避等维度,详细讲解抖音搜索页批量爬取 + 多关键词同步采集的完整实现方案,提供可直接运行的代码,帮助技术人员快速搭建高效的数据采集工具。
一、技术选型与前置准备

  1. 核心技术栈
    本次实现采用Python作为开发语言,生态成熟、第三方库丰富,适配爬虫开发的全流程需求:
    requests:发送 HTTP 请求,模拟浏览器访问抖音搜索接口;
    concurrent.futures:实现多线程并发,支持多关键词同步采集,大幅提升爬取效率;
    json:解析接口返回的 JSON 格式数据,提取目标字段;
    time、random:控制请求间隔,规避抖音反爬机制;
    pandas:将采集的数据保存为 Excel/CSV 文件,方便后续数据分析。
  2. 环境搭建
  3. 关键前提:获取抖音请求参数
    抖音搜索数据采用动态接口加载,无法直接爬取静态网页,需要通过浏览器开发者工具获取核心参数:
    打开电脑端抖音网页版,登录账号;
    按F12打开开发者工具,切换到「Network」-「XHR/ Fetch」;
    在搜索框输入关键词,筛选出包含search关键词的接口请求;
    复制接口的Cookie、User-Agent、X-Sec-Token等请求头参数(这是绕过基础反爬的关键)。
    二、核心技术原理
    接口定向爬取:跳过静态 HTML 渲染,直接请求抖音官方搜索数据接口,获取结构化 JSON 数据;
    多线程并发:为每个搜索关键词分配独立线程,实现多关键词同步采集,相比单线程效率提升 5-10 倍;
    分页遍历:自动识别搜索结果分页,循环采集全量数据,避免数据遗漏;
    数据清洗与持久化:提取有效字段,去重后保存为本地文件,支持直接用于数据分析。
    三、完整代码实现
  4. 基础配置与请求头设置
    首先配置固定参数,替换为自己的请求头参数,保证请求合法性:
    python
    运行
    ```import requests
    import json
    import time
    import random
    import pandas as pd
    from concurrent.futures import ThreadPoolExecutor

-------------------------- 配置区(必须修改) --------------------------

请求头:替换为你自己浏览器的参数

HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36",
"Cookie": "你的抖音Cookie",
"X-Sec-Token": "你的X-Sec-Token",
"Referer": "https://www.douyin.com/",
"Accept": "application/json, text/plain, /"
}

基础配置

BASE_URL = "https://www.douyin.com/aweme/v1/web/search/item/"
MAX_PAGE = 5 # 每个关键词爬取的最大页数
THREAD_NUM = 3 # 并发线程数,控制采集速度

------------------------------------------------------------------------

存储最终采集的所有数据

ALL_DATA = []


2. 单关键词单页数据爬取函数
该函数负责请求单个关键词、单页的搜索数据,解析并返回有效结果:
python
运行
```def crawl_single_page(keyword, page):
    """
    爬取单个关键词的单页数据
    :param keyword: 搜索关键词
    :param page: 页码
    :return: 解析后的视频数据列表
    """
    # 构造请求参数(抖音搜索接口标准参数)
    params = {
        "keyword": keyword,
        "cursor": (page - 1) * 10,  # 分页游标,每页10条数据
        "search_source": "normal",
        "aid": "6383",
        "channel": "douyin_web"
    }

    try:
        # 发送GET请求,设置超时时间
        response = requests.get(BASE_URL, headers=HEADERS, params=params, timeout=10)
        response.raise_for_status()  # 抛出请求异常
        data = response.json()

        # 判断数据是否存在
        if "data" not in data or len(data["data"]) == 0:
            print(f"【{keyword}】第{page}页无数据")
            return []

        # 数据清洗:提取核心字段
        result_list = []
        for item in data["data"]:
            # 基础视频信息
            video_info = {
                "关键词": keyword,
                "视频ID": item.get("aweme_id", ""),
                "视频标题": item.get("desc", ""),
                "博主昵称": item.get("author", {}).get("nickname", ""),
                "博主ID": item.get("author", {}).get("unique_id", ""),
                "点赞数": item.get("statistics", {}).get("digg_count", 0),
                "评论数": item.get("statistics", {}).get("comment_count", 0),
                "转发数": item.get("statistics", {}).get("share_count", 0),
                "发布时间": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(item.get("create_time", 0))),
                "视频链接": f"https://www.douyin.com/video/{item.get('aweme_id', '')}"
            }
            result_list.append(video_info)

        print(f"【{keyword}】第{page}页采集成功,共{len(result_list)}条数据")
        return result_list

    except Exception as e:
        print(f"【{keyword}】第{page}页爬取失败:{str(e)}")
        return []
  1. 单关键词全量爬取函数
    遍历页码,完成单个关键词所有分页数据的采集:
    python
    运行

```def crawl_keyword(keyword):
"""
爬取单个关键词的所有分页数据
"""
for page in range(1, MAX_PAGE + 1):
page_data = crawl_single_page(keyword, page)
if page_data:
ALL_DATA.extend(page_data)

    # 随机延时,规避反爬(1-3秒)
    time.sleep(random.uniform(1, 3))
print(f"===== 【{keyword}】全部页码采集完成 =====")
4. 多关键词同步采集(核心功能)
使用线程池实现多关键词同步并行采集,这是本方案的核心优势:
python
运行
```def batch_crawl(keywords):
    """
    多关键词同步采集入口函数
    :param keywords: 关键词列表
    """
    print(f"===== 开始多关键词同步采集,共{len(keywords)}个关键词 =====")
    # 线程池并发执行
    with ThreadPoolExecutor(max_workers=THREAD_NUM) as executor:
        executor.map(crawl_keyword, keywords)

    # 数据去重(根据视频ID去重)
    df = pd.DataFrame(ALL_DATA)
    df = df.drop_duplicates(subset=["视频ID"], keep="first")

    # 保存数据到Excel
    save_path = "抖音搜索数据.xlsx"
    df.to_excel(save_path, index=False, encoding="utf-8")
    print(f"\n===== 全部采集完成!=====")
    print(f"总数据量:{len(df)} 条")
    print(f"数据已保存至:{save_path}")
  1. 主函数调用
    定义需要采集的关键词列表,启动程序:
    python
    运行
    if __name__ == "__main__":
     # 自定义多关键词列表
     KEYWORDS = ["Python爬虫", "短视频运营", "AI工具推荐", "抖音变现技巧"]
     # 启动批量采集
     batch_crawl(KEYWORDS)
    

四、代码使用说明
修改核心参数:将HEADERS中的Cookie、X-Sec-Token替换为自己浏览器的真实参数;
自定义配置:修改MAX_PAGE(爬取页数)、THREAD_NUM(并发数)、KEYWORDS(关键词列表);
运行程序:执行代码,控制台会实时打印采集进度,最终数据自动保存为 Excel 文件;
结果查看:打开生成的抖音搜索数据.xlsx,包含关键词、视频标题、博主信息、互动数据等完整字段。
五、关键优化与反爬规避策略
抖音具备完善的反爬机制,直接高频爬取会触发 IP 封禁、账号限制等问题,本方案已集成以下优化策略:
随机请求延时:每页请求间隔 1-3 秒,模拟人工操作,避免高频请求;
并发数限制:线程数控制在 3-5 以内,降低服务器请求压力;
请求头伪装:使用真实浏览器的User-Agent和Cookie,伪装成合法用户;
数据去重:避免重复采集同一视频,减少无效请求;
异常捕获:对网络错误、接口异常做捕获处理,保证程序稳定运行。
六、应用场景与扩展方向

  1. 核心应用场景
    行业数据分析:批量采集垂直领域关键词数据,分析内容趋势、爆款视频特征;
    竞品监测:实时采集竞品账号的搜索曝光数据,监控运营策略;
    选题调研:根据搜索结果的点赞、评论数据,筛选高流量选题方向;
    营销获客:采集目标领域博主信息,用于商务合作、品牌推广。
  2. 扩展方向
    代理 IP 池集成:应对高强度采集需求,避免 IP 封禁(推荐亿牛云爬虫代理);
    定时采集:结合schedule库实现每日 / 每周自动采集,生成数据报表;
    图片 / 视频下载:扩展代码,批量采集搜索结果中的视频文件、封面图片;
    数据可视化:对接Echarts或Matplotlib,自动生成数据分析图表。
相关文章
|
Linux Shell 数据安全/隐私保护
Linux配置代理请求
Linux配置代理请求
622 0
|
3月前
|
数据采集 JSON API
Python 进阶爬虫:解析知识星球 API
Python 进阶爬虫:解析知识星球 API
|
4月前
|
数据采集 JSON Java
Java 异步爬虫高效获取小红书短视频内容
Java 异步爬虫高效获取小红书短视频内容
|
6月前
|
数据采集 自然语言处理 数据可视化
时序数据分析:Python爬取新浪财经频道新闻并绘制趋势图
时序数据分析:Python爬取新浪财经频道新闻并绘制趋势图
|
2月前
|
数据采集 存储 前端开发
Python 爬虫实战:批量抓取应用商店分类应用
Python 爬虫实战:批量抓取应用商店分类应用
|
9月前
|
JSON API 数据格式
抖音商品列表API秘籍!轻松获取商品列表页面数据
抖音商品列表API是抖音开放平台的核心电商接口,支持按分类、关键词、销量等条件筛选商品,具备分页、排序、数据过滤等功能,适用于电商整合、竞品分析等场景。接口返回JSON格式数据,包含商品列表、总数及分页信息,提供Python请求示例,便于开发者快速接入。
|
2月前
|
数据采集 Web App开发 数据安全/隐私保护
对比分析:Python爬虫模拟登录的3种主流实现方式
对比分析:Python爬虫模拟登录的3种主流实现方式
|
2月前
|
数据采集 Web App开发 JavaScript
Python 爬虫 403 错误处理:Selenium 与普通请求对比
Python 爬虫 403 错误处理:Selenium 与普通请求对比
|
2月前
|
Web App开发 数据挖掘 开发者
Python 数据分析前置:BeautifulSoup 爬取 NBA 数据源
Python 数据分析前置:BeautifulSoup 爬取 NBA 数据源
|
4月前
|
数据采集 存储 人工智能
利用 Pandas 与爬虫技术挖掘科技新闻趋势
利用 Pandas 与爬虫技术挖掘科技新闻趋势