如何使用 SERP API 采集 Google Jobs 结果

了解如何使用 SERP API 采集 Google Jobs 结果,并用 Python 提取职位标题、公司、地点、描述、发布时间、申请链接和搜索 metadata。

如何使用 SERP API 采集 Google Jobs 结果
Cecilia Hill
最后更新于
5 分钟阅读

Google Jobs results 对很多数据工作流都很有用。你可以从搜索结果中获取职位标题、公司名称、工作地点、发布时间、职位描述、申请链接和来源平台。

这些数据可以用于招聘市场研究、职位看板监测、薪资与职类趋势分析、竞争对手招聘动向追踪,也可以作为 AI recruiting agent 的数据来源。

比较麻烦的做法是自己抓取 Google 页面,处理页面变化、请求失败、反爬限制和自定义 parser。

更稳定的方式是使用 SERP API。你发送一个 Google Jobs query,API 返回结构化 JSON,然后你只需要提取工作流需要的字段。

Google Jobs 可以提取哪些数据?

Google Jobs result 和普通 organic result 不太一样。普通搜索结果通常是 title、link、snippet;Google Jobs 则包含更多职位相关字段。

字段

含义

title

职位标题

company_name

招聘公司

location

工作地点

via

来源平台,例如 LinkedIn 或公司官网

description

职位描述摘要

detected_extensions

结构化细节,例如发布时间、工作类型

job_id

provider 返回的职位 ID

apply_options

申请入口

thumbnail

公司 Logo 或相关图片,如果有

多数场景下,可以先提取 title、company、location、description、posted_at 和 apply link。等到业务需要更细的数据,再扩展字段。

基础请求结构

不同 SERP API 的 endpoint 和参数命名可能不同,但请求思路通常一致:

{
  "engine": "google_jobs",
  "query": "software engineer jobs in New York",
  "location": "United States",
  "language": "en",
  "output": "json"
}

几个核心参数:

参数

作用

query

定义职位搜索意图

location

控制国家、城市或市场

language

控制本地化结果

engine

指定返回 Google Jobs 结果

output

通常选 JSON,方便解析

例如下面几个 query 会得到完全不同的数据集:

data analyst jobs in Austin
remote product manager jobs
nurse practitioner jobs in California
entry level Python developer jobs
marketing manager jobs in London

Query 越具体,后续分析越容易。

Google Jobs JSON 示例

一个简化的 SERP JSON response 可能像这样:

{
  "search_parameters": {
    "engine": "google_jobs",
    "query": "software engineer jobs in New York",
    "location": "United States",
    "language": "en"
  },
  "jobs_results": [
    {
      "title": "Software Engineer",
      "company_name": "ExampleTech",
      "location": "New York, NY",
      "via": "LinkedIn",
      "description": "Build backend services and APIs for a fast-growing SaaS platform.",
      "detected_extensions": {
        "posted_at": "3 days ago",
        "schedule_type": "Full-time"
      },
      "job_id": "eyJqb2JfdGl0bGUiOiJ...",
      "apply_options": [
        {
          "title": "Apply on LinkedIn",
          "link": "https://www.linkedin.com/jobs/view/example"
        }
      ]
    }
  ]
}

不同 API provider 的字段可能略有差异。比如有些使用 jobs_results,有些使用 job_results;有些使用 company_name,有些使用 company。所以 parser 最好做得灵活一点。

Python 示例:抓取并解析 Google Jobs 结果

下面是一个 provider-neutral 的 Python 示例。你只需要替换 SERP_API_ENDPOINT 和 authentication 方式即可。

import os
import csv
import requests


SERP_API_KEY = os.getenv("SERP_API_KEY")
SERP_API_ENDPOINT = os.getenv("SERP_API_ENDPOINT")


def clean_text(value):
    if not value:
        return ""
    return " ".join(str(value).split())


def fetch_google_jobs(query, location="United States", language="en"):
    params = {
        "engine": "google_jobs",
        "query": query,
        "location": location,
        "language": language,
        "output": "json"
    }

    headers = {
        "Authorization": f"Bearer {SERP_API_KEY}"
    }

    response = requests.get(
        SERP_API_ENDPOINT,
        params=params,
        headers=headers,
        timeout=30
    )

    response.raise_for_status()
    return response.json()


def extract_jobs(serp_json):
    raw_jobs = (
        serp_json.get("jobs_results")
        or serp_json.get("job_results")
        or []
    )

    extracted = []

    for item in raw_jobs:
        extensions = item.get("detected_extensions") or {}

        apply_options = item.get("apply_options") or []
        apply_link = ""
        if apply_options and isinstance(apply_options, list):
            apply_link = apply_options[0].get("link", "")

        extracted.append({
            "title": clean_text(item.get("title")),
            "company": clean_text(item.get("company_name") or item.get("company")),
            "location": clean_text(item.get("location")),
            "source": clean_text(item.get("via")),
            "posted_at": clean_text(extensions.get("posted_at")),
            "schedule_type": clean_text(extensions.get("schedule_type")),
            "description": clean_text(item.get("description")),
            "job_id": item.get("job_id", ""),
            "apply_link": apply_link
        })

    return extracted


def save_jobs_to_csv(jobs, filename="google_jobs_results.csv"):
    fieldnames = [
        "title",
        "company",
        "location",
        "source",
        "posted_at",
        "schedule_type",
        "description",
        "job_id",
        "apply_link"
    ]

    with open(filename, "w", newline="", encoding="utf-8") as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        writer.writeheader()
        writer.writerows(jobs)


if __name__ == "__main__":
    serp_json = fetch_google_jobs(
        query="software engineer jobs in New York",
        location="United States"
    )

    jobs = extract_jobs(serp_json)
    save_jobs_to_csv(jobs)

    print(f"Saved {len(jobs)} job listings.")

这段程序完成四件事:发送 Google Jobs query、接收 SERP JSON、提取职位字段、导出 CSV。

CSV 可以直接在 Excel 中打开,也可以导入 dashboard、数据库或招聘分析系统。

加入搜索 Metadata

职位数据本身有用,但和搜索上下文一起保存时,价值更高。

同样是 “software engineer jobs”,New York、San Francisco、London 和 Singapore 的结果可能完全不同。

可以这样加入 metadata:

from datetime import datetime, timezone


def add_metadata(jobs, query, location, language="en"):
    collected_at = datetime.now(timezone.utc).isoformat()

    for job in jobs:
        job["query"] = query
        job["search_location"] = location
        job["language"] = language
        job["collected_at"] = collected_at

    return jobs

正式使用时,建议至少保存:

  • query

  • search location

  • language

  • collection timestamp

  • job title

  • company

  • job location

  • source platform

  • apply link

没有 metadata,后续就很难比较不同城市、时间段或职类的变化。

常见使用场景

招聘市场研究

你可以追踪某个市场中最常出现的职位类型。例如比较 “data analyst”、“machine learning engineer” 和 “AI product manager” 在不同城市的需求变化。

竞争对手招聘情报

公司招聘方向常常会透露产品和业务重点。如果竞争对手突然发布大量 “AI infrastructure engineer” 或 “partnerships manager” 职位,这可能是值得关注的信号。

Job Board Monitoring

如果你运营招聘网站,Google Jobs data 可以帮助你了解重要 query 下有哪些职位和来源平台正在曝光。

AI Recruiting Agent

AI recruiting agent 可以把 Google Jobs results 当作 source discovery layer。它可以收集职位、按 title 或 location 筛选、总结职位要求,并把合适职位推荐给候选人或招聘人员。

流程可以很简单:

User asks for job market insight
→ Generate Google Jobs query
→ Fetch SERP JSON
→ Extract job listings
→ Filter by title, company, location, and schedule
→ Summarize trends or recommend listings

Agent 不需要盲目处理所有字段。先用结构化字段做筛选,只在需要时再抓取更深层页面。

如何选择 SERP API?

对 Google Jobs scraping 来说,选型时应比较 field completeness、JSON quality、location controls、pricing model 和 schema stability。

你可以用 SerpApi、Bright Data、Serper.dev、SearchAPI 或 Talordata 测试这类 workflow。真正重要的是 response 是否能返回干净的职位字段,让你的 script、dashboard 或 AI workflow 直接使用。

如果只是快速 prototype,轻量 Google Search API 可能已经足够。如果要跨国家、城市和职类长期监测职位数据,就需要更好的 localization、稳定 JSON、可靠 retry 和可预期的 usable result 成本。

正式选型前,可以用同样 20 个 job queries 测试 2–3 个 provider,然后比较:

  • 返回职位数量

  • 缺失 company name 的比例

  • 缺失 apply link 的比例

  • location 是否准确

  • posted date 是否可用

  • duplicate listings 数量

  • cost per usable job record

这个小测试通常比看功能清单更有价值。

FAQ

什么是 Google Jobs scraping?

Google Jobs scraping 是指从 Google Jobs results 中采集结构化职位数据,例如职位标题、公司、工作地点、来源平台、描述、发布时间和申请链接。

可以用 Python 采集 Google Jobs results 吗?

可以。最简单的方式是使用 Python 调用 SERP API,接收结构化 JSON,解析 jobs result array,并将字段导出为 CSV 或写入数据库。

Google Jobs 应该提取哪些字段?

可以先提取 title、company name、job location、source platform、description、posting date、schedule type、job ID 和 apply link。也应保存 query、search location、language 和 timestamp 等 metadata。

Google Jobs data 对 AI Agent 有用吗?

有用。AI Agent 可以用 Google Jobs results 发现职位、总结市场需求、比较公司招聘方向、按地点或工作类型筛选职位,并支持 recruiting workflow。

结语

采集 Google Jobs results,不只是收集职位列表,而是把搜索结果转化为结构化招聘数据。

先从明确 query 开始。使用 SERP API 获取 JSON。提取 title、company、location、source、description、posting date 和 apply link。再保存 metadata,方便之后比较。

当数据被结构化后,它可以支持市场研究、招聘工具、竞争对手监测、dashboard 和 AI recruiting agent。

立即开展您的数据业务

加入全球最强大的代理网络

免费试用