×

大麦网关键词联想列表接口实战:请求节流与候选词清洗方案

Ace Ace 发表于2026-09-23 16:29:08 浏览14 评论0

抢沙发发表评论

前言

在演出票务业务场景,关键词联想词是做搜索推荐、类目词库搭建、用户搜索行为分析的基础数据源。网上多数示例仅简单演示单次请求获取关键词,缺少生产环境下的词表去重、无效词过滤、接口频率控制逻辑。本文基于大麦网关键词联想列表接口,封装一套带词库清洗、限流保护的调用示例,解决批量拉取候选关键词时重复词、广告词、空词污染本地词库的问题。

前置准备

调用前需要准备基础请求头参数,接口会校验 UA 与请求来源,缺少基础 header 会直接返回空数据。需要安装 requests 库用于网络请求。

pip install requests

点击获取key和secret

完整代码示例

import requests
import time

class DamaiKeywordCrawler:
    def __init__(self):
        self.session = requests.Session()
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
            "Referer": "https://www.damai.cn/",
            "Accept": "application/json, text/plain, */*"
        }
        # 存储最终干净关键词集合,自动去重
        self.keyword_set = set()
        # 限流间隔,防止高频请求
        self.request_interval = 0.8

    def fetch_suggest_keywords(self, seed_word: str):
        """根据种子词拉取联想关键词列表"""
        url = "https://search.damai.cn/searchajax.html"
        params = {
            "keyword": seed_word,
            "action": "suggest"
        }
        try:
            resp = self.session.get(url, headers=self.headers, params=params, timeout=8)
            if resp.status_code == 200:
                data = resp.json()
                raw_list = data.get("result", [])
                # 过滤空字符串、长度过短无效词
                clean_words = [w.strip() for w in raw_list if len(w.strip()) > 1]
                for word in clean_words:
                    self.keyword_set.add(word)
                return clean_words
            else:
                print(f"请求异常,状态码:{resp.status_code}")
                return []
        except Exception as e:
            print(f"接口请求异常:{str(e)}")
            return []

    def batch_get_keywords(self, seed_words: list):
        """批量遍历种子词,采集联想关键词"""
        for word in seed_words:
            res = self.fetch_suggest_keywords(word)
            print(f"种子词【{word}】获取联想词:{res}")
            time.sleep(self.request_interval)
        return list(self.keyword_set)

if __name__ == "__main__":
    client = DamaiKeywordCrawler()
    seeds = ["演唱会", "话剧", "音乐节"]
    final_word_list = client.batch_get_keywords(seeds)
    print("清洗后完整关键词词库:", final_word_list)

代码逻辑解析

代码采用会话复用 Session,复用连接减少握手开销。核心分为三层:请求层、数据过滤层、词库存储层。


  1. 请求层:封装 GET 请求,携带平台校验必需的请求头,设置超时时间避免长时间阻塞。

  2. 过滤层:过滤长度小于 2 的无效词,去除前后空格,利用集合自动去重,避免同一关键词重复入库。

  3. 批量调度层:设置请求间隔,控制 QPS,短时间高频请求容易触发访问限制。


线上对接避坑要点


  1. 接口返回联想词存在时效性,热门演出关键词会随档期动态更新,词库建议定时增量更新,不要全量反复拉取。

  2. 种子词选择会直接影响结果,短词、生僻词大概率返回空列表,优先使用类目基础词作为种子词。

  3. 不要并发大量请求,该接口有访问风控,并发过高会临时限制 IP 访问。

  4. 联想关键词仅作为业务词库参考,不可直接用于票务抢购等违规场景,遵循平台接口使用协议。

群贤毕至

访客