You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google自定义搜索API中获取网站完整标题?

问题描述

我用Google自定义搜索API获取搜索结果,发现部分返回的标题被截断(以“...”结尾),想拿到完整标题。试过用Selenium访问页面取标题,但速度太慢,不是合适的方案。

我的搜索代码:

def google_search(query, **kwargs):
    service = build("customsearch", "v1", developerKey=app.config.get("GOOGLE_API_KEY"))
    res = service.cse().list(q=query, cx=app.config.get("GOOGLE_CSE_KEY"),**kwargs).execute()
    return res['items']

response = google_search(query, num=pageSize, start=start)
for item in response:
    print('Title: ', item['title'])

尝试过的Selenium方案(效率太低):

def get_full_title(title, url):
    if title.endswith("..."):
        driver = webdriver.Chrome(options=options)
        driver.get(url)
        fullTitle = driver.title
        driver.quit()
        return fullTitle
    return title

请问怎么获取完整标题?可编程搜索引擎里有没有相关设置能实现?


解决方案

1. 调整Google自定义搜索控制台设置

登录Google自定义搜索控制台(CSE),找到你的搜索引擎配置:

  • 进入外观选项卡
  • 找到搜索结果区域,查看「标题长度」相关设置,尝试调大允许的最大标题长度
  • 部分版本的CSE有「是否截断长标题」的开关,关闭后API返回的标题可能会保留完整内容

2. 从API返回的pagemap字段提取完整标题

Google自定义搜索API的返回结果里,部分条目会包含pagemap字段,里面可能存着网页的原始元数据(比如og:title或者页面的<title>标签内容),可以从这里提取完整标题:

def get_full_title_from_api(item):
    # 优先取og:title(通常是完整的)
    if 'pagemap' in item and 'metatags' in item['pagemap']:
        for meta in item['pagemap']['metatags']:
            if 'og:title' in meta:
                return meta['og:title']
            # 没有og:title就取普通title标签内容
            if 'title' in meta:
                return meta['title']
    # 没有pagemap就返回原标题
    return item['title']

# 使用示例
response = google_search(query, num=pageSize, start=start)
for item in response:
    full_title = get_full_title_from_api(item)
    print('Full Title: ', full_title)

3. 用轻量HTTP请求替代Selenium

如果上面的方法都不行,可以用requests+BeautifulSoup做轻量请求,直接抓网页的<title>标签,速度比Selenium快很多:

import requests
from bs4 import BeautifulSoup

def get_full_title_fast(url):
    try:
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
        }
        response = requests.get(url, headers=headers, timeout=5)
        soup = BeautifulSoup(response.text, 'html.parser')
        if soup.title:
            return soup.title.string.strip()
    except Exception as e:
        print(f"获取标题失败: {e}")
    return None

# 使用示例
response = google_search(query, num=pageSize, start=start)
for item in response:
    if item['title'].endswith("..."):
        full_title = get_full_title_fast(item['link']) or item['title']
    else:
        full_title = item['title']
    print('Full Title: ', full_title)

注意事项

  • 修改CSE控制台设置后,需要等几分钟到几小时才会生效
  • pagemap字段不是所有条目都有,取决于目标网页是否正确配置了元数据
  • 用requests请求时,要设置合理的请求头和超时时间,避免被目标网站封IP

内容的提问来源于stack exchange,提问作者devstar2422

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 09:07:22