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

Python爬取Google Scholar时请求返回HTML内容不一致的原因

Google Scholar爬取时HTML内容不一致的原因分析

问题描述

我正在用Python在Colab中爬取Google Scholar的部分页面。在Google Scholar的“查看文章”页面中,如果文章存在对应的网页链接,该链接会作为文章标题的跳转链接出现在代码指定的HTML位置。但在Colab中运行代码时,仅能偶尔获取到该URL,其余时候HTML中无此链接;即使在浏览器中禁用JavaScript,该链接也始终可见,且其他HTML元素均能正常提取。

相关代码

import requests
from bs4 import BeautifulSoup
user_agent = 'Your User Agent'
r = requests.get('https://scholar.google.com/citations?view_op=view_citation&hl=en&citation_for_view=l9Or8EMAAAAJ:u5HHmVD_uO8C',  headers = {'User-agent': user_agent})
r_soup =  BeautifulSoup(r.text, 'html.parser')
try:
    url = r_soup.find('a',class_="gsc_oci_title_link")['href']
except:
    url = 'missing'
print(url)

内容差异说明

成功爬取时的HTML包含目标链接,失败时该链接完全缺失,两者的差异对比显示左侧为正常有链接的结构,右侧为链接丢失的结构。

可能的原因

  • 反爬机制的动态限制:Google Scholar会识别请求来源的特征,Colab的云服务器IP属于爬虫高风险IP池,容易被Google标记,从而动态隐藏部分内容;而本地浏览器的普通用户IP限制更宽松,所以能稳定获取链接。
  • 请求头信息不完整:仅设置User-Agent不足以模拟真实浏览器请求,Google可能会校验Accept、Accept-Language、Referer、Cookie等其他头字段。浏览器发送的请求头更全面,requests请求特征差异大,导致返回内容不同。
  • 服务器端的内容渲染逻辑:即使禁用JS后浏览器能看到链接,Google仍可能在服务器端根据请求是否来自自动化工具,决定是否渲染该链接。非浏览器请求会被判定为爬虫,从而隐藏部分内容。
  • 会话状态缺失:浏览器会通过Cookie维持会话,而requests每次请求都是全新会话,没有携带之前的会话Cookie,Google可能根据会话状态返回不同内容。
  • IP信誉或地域限制:Colab的IP可能来自被Google Scholar限制的地区,或者该IP有过频繁爬取记录,被临时限制返回完整内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:52:45