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

我的Google搜索Python脚本无结果返回,如何排查故障?

问题原因及修复方案

核心问题

  1. 请求被Google拦截:Google会识别非浏览器发起的请求,直接用requests.get调用会返回人机验证页面,而非正常搜索结果。
  2. 链接提取逻辑错误:Google搜索结果的a标签href是/url?q=真实链接&...的跳转格式,原脚本直接取link["href"]会拿到无效的跳转路径,且页面选择器可能因Google页面结构更新失效。
  3. 代码缩进问题:原脚本中函数内部代码无缩进,属于语法错误(推测是粘贴时格式丢失,修复时需保证正确缩进)。

修复后的完整代码

import requests
from bs4 import BeautifulSoup
import csv
from urllib.parse import urlparse, parse_qs

def get_google_search_results_urls(query, num_results=10):
    base_url = "https://www.google.com/search"
    # 模拟浏览器请求头,避免被反爬拦截
    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"
    }
    params = {"q": query, "num": num_results}

    response = requests.get(base_url, params=params, headers=headers)
    response.raise_for_status()

    soup = BeautifulSoup(response.text, "html.parser")
    result_urls = []

    # 适配当前Google搜索结果的容器选择器,提取真实链接
    for result in soup.select(".g"):
        link = result.select_one("a")
        if link:
            href = link.get("href")
            # 解析Google跳转链接,提取真实目标URL
            if href.startswith("/url?q="):
                parsed_url = urlparse(href)
                real_url = parse_qs(parsed_url.query).get("q")[0]
                result_urls.append(real_url)
            # 兼容少数直接显示完整链接的情况
            elif href.startswith("http"):
                result_urls.append(href)
    
    # 确保返回结果数量不超过指定值
    return result_urls[:num_results]

def write_urls_to_csv(urls, csv_file):
    with open(csv_file, "w", newline="", encoding="utf-8") as csvfile:
        csv_writer = csv.writer(csvfile)
        csv_writer.writerow(["URL"])

        for url in urls:
            csv_writer.writerow([url])

if __name__ == "__main__":
    search_query = input("Enter your Google search query: ")
    num_results = int(input("Enter the number of search results to fetch: "))

    search_results = get_google_search_results_urls(search_query, num_results)

    if search_results:
        csv_file_name = "google_search_results.csv"
        write_urls_to_csv(search_results, csv_file_name)
        print(f"Search results URLs written to {csv_file_name}")
    else:
        print("No search results found.")

关键修复点说明

  • 添加请求头:通过headers模拟Chrome浏览器请求,绕过Google基础反爬检测。
  • 修正链接提取:用urllib.parse解析Google的跳转链接,提取真实目标URL,同时兼容特殊情况。
  • 更新选择器:将原选择器替换为更稳定的.g(Google搜索结果容器类),避免页面结构微调导致失效。
  • 编码优化:写入CSV时指定utf-8编码,防止非ASCII字符乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:52:54