做 SEO 或投放时,你最想知道的一件事往往很朴素:某个关键词排名到底涨没涨。但每天手动打开无痕窗口、切地区、翻页找自己网站,既费时间又不稳定。 这篇文章会带你用 Python 写一个小脚本,实现最基础的 Google SERP 关键词排名监控:输入关键词 + 目标域名,输出排名位置,并且能定时运行、发邮件提醒。
你看到的 Google 结果,可能和别人不一样:
所以更靠谱的方式是:用脚本把流程固定下来,持续做 关键词排名跟踪,把波动当成数据看。
核心逻辑很简单:
不过也要提前说一句:Google 页面结构会变、反爬也会更严格。 如果你希望更省心地拿到稳定的 SERP 数据(少踩验证码、少改解析规则),可以考虑用专门的 SERP 抓取服务来做底层数据获取: 你依然可以保留“比对域名算排名”的逻辑,只是把“拿页面 HTML”这一步交给更稳定的接口来做。
bash mkdir google-rank-tracker cd google-rank-tracker pip install requests beautifulsoup4
新建 rank_tracker.py:
python import requests from bs4 import BeautifulSoup from urllib.parse import urlparse
def normalize_domain(netloc: str) -> str: netloc = (netloc or "").lower() return netloc[4:] if netloc.startswith("www.") else netloc
def get_google_rank(keyword: str, target_domain: str, num_results: int = 20, gl: str = "us", hl: str = "en"): 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.google.com/", }
params = {"q": keyword, "num": num_results, "gl": gl, "hl": hl}
resp = requests.get("https://www.google.com/search", params=params, headers=headers, timeout=30)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
links = soup.select("div.yuRUbf > a")
target = normalize_domain(target_domain)
for idx, a in enumerate(links, start=1):
href = a.get("href") or ""
domain = normalize_domain(urlparse(href).netloc)
if domain == target or domain.endswith("." + target):
return idx
return None
if name == "main": keyword = "scrape prices" domain = "christian-schou.dk"
rank = get_google_rank(keyword, domain, num_results=20, gl="us", hl="en")
if rank:
print(f"Found: {domain} ranks #{rank} for '{keyword}'")
else:
print(f"Not found in top 20 for '{keyword}'")
这个版本的目标很明确:先跑通“关键词排名监控”的最短路径。你能稳定拿到名次后,再谈扩展到更多关键词、更多国家、更多通知方式。
Google SERP 在不同国家会显示不同结果,所以“排名”天然和地区绑定。 上面代码里 gl(国家)和 hl(界面语言)就是为了减少波动,让你的 Google SERP 关键词排名更可比。
当你需要同时监控多个国家时,建议把国家列表跑成循环,输出一组结果。 如果你不想自己处理地区切换、IP、封锁等细节,用现成方案会更省时间: 这样你更容易把精力放在“排名变化→行动策略”上,而不是天天修解析规则。
手动运行脚本很快会忘,所以加一个定时任务更实用。这里给你一个纯 Python 的轻量做法。
先安装:
bash pip install schedule
然后新建 daily_job.py:
python import time import schedule from rank_tracker import get_google_rank
KEYWORD = "scrape prices" DOMAIN = "christian-schou.dk"
def job(): rank = get_google_rank(KEYWORD, DOMAIN, num_results=50, gl="us", hl="en") if rank: print(f"[OK] {DOMAIN} ranks #{rank} for '{KEYWORD}'") else: print(f"[MISS] Not found in top 50 for '{KEYWORD}'")
schedule.every().day.at("09:00").do(job)
if name == "main": job() while True: schedule.run_pending() time.sleep(1)
如果你已经有自己的数据管道(写数据库、出报表、推 Slack/邮件),也可以把“抓取 SERP”这步单独封装成服务化调用。 👉 把 Scrapingdog 接入你的 Python 排名追踪脚本,扩展到批量任务 当你从 1 个关键词扩展到 100 个关键词时,这种“模块化”会明显更稳、更省维护成本。
这是做 Google 搜索结果抓取时最常见的翻车点:
实用建议是:先把目标做小(比如只查 Top 20),再逐步加“翻页、地区、通知、存储”。一口气做全套,调试成本会飙升。
用 Python 做 关键词排名监控,最大的价值不是“省一笔工具费”,而是把流程变成可控的系统:更稳定、更可扩展、覆盖更广。 下一步你可以尝试把结果存成 CSV/数据库,做趋势图,再结合内容更新或外链动作,形成真正可执行的 SEO 闭环。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。