首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >抖音搜索页数据批量爬取,多关键词同步采集实现

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

原创
作者头像
小白学大数据
发布2026-05-06 16:44:41
发布2026-05-06 16:44:41
3760
举报

在短视频行业数据分析、竞品监测、内容趋势研究等实际业务场景中,抖音搜索页数据是极具价值的信息源,包含视频标题、博主信息、点赞量、评论量、发布时间等核心数据。传统手动复制搜索结果的方式效率极低,无法满足批量、多关键词、高频次的数据采集需求。本文将从技术原理、环境搭建、核心代码实现、多关键词同步采集、反爬规避等维度,详细讲解抖音搜索页批量爬取 + 多关键词同步采集的完整实现方案,提供可直接运行的代码,帮助技术人员快速搭建高效的数据采集工具。一、技术选型与前置准备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 倍;分页遍历:自动识别搜索结果分页,循环采集全量数据,避免数据遗漏;数据清洗与持久化:提取有效字段,去重后保存为本地文件,支持直接用于数据分析。三、完整代码实现1. 基础配置与请求头设置首先配置固定参数,替换为自己的请求头参数,保证请求合法性:python运行

代码语言:txt
复制
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运行

代码语言:txt
复制
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 []

3. 单关键词全量爬取函数遍历页码,完成单个关键词所有分页数据的采集:python运行

代码语言:txt
复制
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运行

代码语言:txt
复制
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}】全部页码采集完成 =====")

5. 主函数调用定义需要采集的关键词列表,启动程序:python运行

代码语言:txt
复制
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,自动生成数据分析图表。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档