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

Web Scraping抓取谷歌搜索结果页时无法获取全部链接如何解决?

问题成因
  • 默认请求特征触发谷歌反爬:requests发送请求时默认携带的User-Agent值为python-requests/[版本号],谷歌识别到是爬虫请求后,会直接返回精简版、截断版的搜索页面,不会返回和桌面浏览器一致的完整SERP内容,这是该问题最核心的诱因。
  • 未携带有效会话参数:正常浏览器访问谷歌搜索时会被下发用于身份验证的Cookie,无有效Cookie的裸请求大概率会被限制返回内容的完整度。
  • IP/区域匹配偏差:如果请求IP和你本地Chrome访问的IP所属区域不同,谷歌也会返回结构、内容量级完全不同的搜索结果,导致对应标签缺失。

另外你当前的代码逻辑也存在丢链问题:正则规则仅匹配.com后缀的域名,会直接漏掉.in、.org等其他后缀的站点。

修复方案
  1. 优先修改请求头,添加模拟桌面浏览器的标识,示例修改后代码如下:
import requests
from bs4 import BeautifulSoup
import re

# 添加模拟Chrome的请求头配置
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

url = "https://www.google.com/search?q=glass+beads+india"
# 请求时携带headers参数
r = requests.get(url, headers=headers)
page = r.text 
soup = BeautifulSoup(page, 'lxml') 

link_list = []
for tag in soup.find_all('a'):
    href = tag['href']
    # 优先匹配谷歌跳转链接格式,提取目标地址
    if href.startswith('/url?q='):
        raw_link = href.split('/url?q=')[1].split('&')[0]
        if 'google.com' not in raw_link:
            # 提取域名逻辑可根据需求调整,无需限制.com后缀
            try:
                domain = re.search('https?://[^/]+', raw_link).group(0)
                link_list.append(domain)
            except:
                pass

link_list = list(set(link_list))
print(link_list)
  1. 如果调整请求头后仍有内容缺失,说明对应内容是前端JS动态渲染生成的,需要改用selenium、playwright等模拟浏览器的工具加载完整页面后再提取内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 06:36:07