👇 连享会 · 推文导航 | www.lianxh.cn
连享会:2026五一论文班 · 线上时间:4月15日(先导课),5月2-4日(正式课)嘉宾:郭士祺 (上海交通大学)、戚树森 (厦门大学)、李学恒 (中山大学)咨询:王老师 18903405450(微信)

先导课:Claude Code / Opencode 快速上手
第一部分:安装与配置(25分钟)
Claude Code 与 Opencode 的定位与区别 两条安装路径:Claude Code(需特殊网络)vs Opencode(国内推荐,自带免费模型) 完整工具链:AI 本体 + VS Code + Git + Miniconda + Pandoc 现场演示:从零启动、界面介绍、常见问题排查 配套教程:《Opencode 套件安装指南》 第二部分:Skill 生态(35分钟)
什么是 Skill:从重复 prompt 到可复用工作规则 Skill 的三类分类:文档资产型、流程自动化型、MCP 增强型 发现、安装与触发机制(渐进式披露) 演示 1:文件格式自由切换(PDF ↔ Markdown ↔ Word) 演示 2: web-research深度网络调研,自动生成带引用的研究报告演示 3: marp-slides-creator将调研报告一键转为演示文稿串联效果:调研报告 → Markdown Slides → PDF

温馨提示: 文中链接在微信中无法生效。请点击底部「阅读原文」。或直接长按/扫描如下二维码,直达原文:

作者: 连玉君 (中山大学)邮箱:arlionn@163.com
本文写作过程中借助了 AI 工具:ChatGPT,豆包
1. 背景:你看到的网址,不一定能直接下载
在数据分析中,我们经常需要从网页上获取文件,比如:
从 GitHub 下载 .csv数据从 政府网站 抓取公告 使用 DOI 链接 获取学术文献
但你可能遇到这样令人抓狂的报错:
HTTP error 403File not foundCannot open URL
这些错误,往往不是你代码写错了,而是踩到了 网页跳转(redirect) 的坑:你访问的网址其实只是 “入口”,背后被 网页跳转(redirect) 指向了另一个真正的地址。
类比:你收藏了图书馆旧网址,结果它早搬家了
你打开旧链接,看到的是个跳转页面: “我们的网站已迁移,3 秒后自动跳转至新地址”, 浏览器很听话,自动替你跳过去。 但程序(尤其是爬虫和下载命令)若没有开启“自动跳转”,就会卡在旧页面。
这些看似简单的跳转行为,是造成程序抓取失败的常见原因之一。 接下来,我们将通过具体例子,解释网页跳转的工作原理,并提供在 Stata、R 和 Python 中应对这些跳转的实用方案。
2. 网页跳转:你看到的不是你拿到的
网页跳转是服务器告诉客户端“你应该去另一个地址”,浏览器会自动跳过去,但程序不一定跟跳。
例 1:DOI 链接跳转
在论文引用中,我们常常看到形如 https://doi.org/{DOI} 的链接,例如:
URL1:https://doi.org/10.1257/aer.109.4.1197
但当你点击该链接时,浏览器中实际显示的网址往往是:
URL2:https://www.aeaweb.org/articles?id=10.1257/aer.109.4.1197
这是因为 DOI 系统一开始并不指向论文所在网站,而是将所有文献的入口统一托管在 doi.org。这个网站本身并不存储论文内容,而是作为一个 标准化的跳转服务,根据 DOI 查询注册信息,再将用户跳转到对应出版社的网页。
这种跳转一般通过 HTTP 301(永久跳转)或 HTTP 302(临时跳转)实现。 浏览器会自动跟随跳转,但程序或爬虫若未开启跳转功能,就无法获取真实的 PDF 或页面地址。
这一机制也被广泛应用于 SSRN、arXiv、Nature、Science 等期刊和论文平台,统一管理引用链接与实际访问路径。
下图展示了整个 DOI 跳转的过程:

例 2:GitHub 网页跳转
以 github 仓库 lianxhcn/data 中的 03-sales.csv 文件为例,你看到的文件链接是:
# Link00https://github.com/lianxhcn/data/blob/main/03-sales.csv这个地址其实是网页地址 (用于展示文件概况),不是文件下载地址。

进入 03-sales.csv 的浏览页后,有些人会 右击 该页面的 Raw 按钮 → **复制链接地址 (E)**,得到如下网址:
# Link01https://github.com/lianxhcn/data/raw/refs/heads/main/03-sales.csv或者根据 github 的说明文档,使用如下网址:
# Link02https://github.com/lianxhcn/data/blob/main/03-sales.csv?raw=true
上述 Link01 和 Link02 虽然在多数情况下都可以用于下载数据,但也都是 二次跳转地址,它们最终都会跳转到文件下载地址 (唯一地址,可以单击 Raw 按钮后,在地址栏中看到):
# Link_finalhttps://raw.githubusercontent.com/lianxhcn/data/main/03-sales.csv因此,在编写程序进行大规模数据下载时:
使用 Link00无法下载数据;使用 Link01/Link02则缺乏稳定性,因为有些程序 (如 Stata 中的copy,use等命令) 不具备跳转功能;同时,二次定向规则发生变化时,这些中间网址也会失效。使用 Link_final是最安全可靠的方式,因为它是 唯一的文件下载地址,不会发生跳转。
3. 如何判断一个网址是否会跳转?
方法 1:浏览器观察法
复制原始链接,在新标签页粘贴打开; 若地址栏变化,说明跳转发生。
方法 2:开发者工具法
打开网页 → F12 → Network → 刷新页面; 查找是否出现 3xx 状态码和 Location:字段。
方法 3:使用命令行工具
curl或wget
curl -I https://github.com/lianxhcn/data/blob/main/03-sales.csv输出:
HTTP/1.1 302 FoundLocation: https://raw.githubusercontent.com/...说明该链接发生了跳转。
加上 -L 参数即可跟踪跳转:
curl -L -o sales.csv https://github.com/lianxhcn/data/blob/main/03-sales.csv4. Stata / R / Python 中如何处理跳转?
不同的编程工具在处理网页跳转时表现不同。有些工具(如 Python 的 requests、R 的 httr 包)默认支持自动跟踪跳转,能够顺利获取最终资源。而另一些工具(如 Stata 的 import delimited、copy 命令)则不支持自动跳转,直接访问含跳转的网址时可能失败。此时,推荐结合外部工具(如 curl),先下载文件到本地,再用目标程序进行数据导入。这样可以有效应对跳转带来的下载障碍,提高数据获取的稳定性和成功率。
requestsurllib | r.url 查看最终网址 | ||
httr::GET() | res$url | ||
curlwget | -L 参数 | curl -I | |
import delimited | shell curl -L 使用 |
Python 示例
import requestsurl = "https://github.com/lianxhcn/data/blob/main/03-sales.csv?raw=true"res = requests.get(url, allow_redirects=True)print(res.url) # 会跳转到 raw.githubusercontent.com 的真实地址注意,填写 url 时,务必添加 ?raw=true 参数,否则跳转机制无法生效。
因此,采用如下写法会更好一些:
url_html = "https://github.com/lianxhcn/data/blob/main/03-sales.csv"url = url_html + "?raw=true"res = requests.get(url, allow_redirects=True)有关 Python 中如何处理跳转的更多细节,可以参考 requests 文档。
R 示例
library(httr)url_html <- "https://github.com/lianxhcn/data/blob/main/03-sales.csv"url <- paste0(url_html, "?raw=true")res <- GET(url)res$url # 跳转后的真实地址有关 R 中如何处理跳转的更多细节,可以参考 httr 文档 和 GET 文档。
Stata 示例
* 使用 curl 下载后再导入local url_html "https://github.com/lianxhcn/data/blob/main/03-sales.csv"local url "`url_html'?raw=true"shell curl -L -o sales.csv "`url'"import delimited using "sales.csv", clear // 导入 Stata 此处,我们使用了 Stata 的 [D] shell 命令调用 DOS 命令 curl 来处理跳转。详情参见如下推文:
严子凯, 2022, Stata-DOS:事半功倍的DOS命令汇总, 连享会 No.1047. Will Matsuoka, 2016, Stata and cURL, Link curl tutorial
5. 进阶阅读
对于希望深入了解网页跳转及其在数据抓取中的应用,以下是一些有价值的参考资料。
首先,理解 HTTP 状态码 是基础,常见的跳转状态码如 301(永久跳转)和 302(临时跳转)对网站行为影响深远。你可以在 MDN Web Docs 中找到详细的解释。
对于爬虫开发者,requests 和 curl 是最常用的工具,相关文档提供了如何使用它们来处理跳转。requests 的使用方法请参考 requests 文档,而 curl 的详细手册可以在 curl: Manual 找到。
此外,DOI 跳转机制在学术文献访问中非常重要,你可以通过 DOI.org 和 CrossRef 了解更多相关信息。
如果你遇到复杂的跳转链,如何跟踪每次跳转并获取最终 URL,Stack Overflow 上的 Redirect Loops 讨论提供了解决方案。
最后,学习如何解决验证码和动态内容等挑战,Scrapy 的 Documentation 是一个很好的资源,适合更复杂的爬虫任务。
6. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh lianxh dos 爬, md nocat安装最新版lianxh命令:ssc install lianxh, replace
严子凯, 2022, Stata-DOS:事半功倍的DOS命令汇总, 连享会 No.1047. 修博文, 2024, 爬取政府工作报告文本-Python, 连享会 No.1354. 初虹, 2022, Python爬虫1:小白系列之requests和json, 连享会 No.887. 初虹, 2022, Python爬虫2:小白系列之requests和lxml, 连享会 No.888. 吴浩然, 2024, 数据爬取:美国证监会EDGAR系统数据获取及Python实现, 连享会 No.1329. 周豪波, 2020, Python 调用 API 爬取百度 POI 数据小贴士——坐标转换、数据清洗与 ArcGIS 可视化, 连享会 No.20. 孙斯嘉, 2020, Python 调用 API 爬取百度 POI 数据, 连享会 No.60. 左从江, 2020, Python: 批量爬取下载中国知网(CNKI) PDF论文, 连享会 No.54. 李岸瑶, 2021, Stata爬虫:爬取地区宏观数据, 连享会 No.684. 李岸瑶, 2021, Stata爬虫:爬取A股公司基本信息, 连享会 No.685. 李青塬, 2022, Stata+Python:同花顺里爬取创历史新高的股票, 连享会 No.957. 李青塬, 2022, Stata+Python:爬取创历史新高股票列表, 连享会 No.894. 梁海, 2020, Python:爬取东方财富股吧评论进行情感分析, 连享会 No.440. 游万海, 2020, Stata爬虫-正则表达式:爬取必胜客, 连享会 No.287. 王文韬, 2020, Python爬虫: 《经济研究》研究热点和主题分析, 连享会 No.88. 王颖, 2022, Python爬取静态网站:以历史天气为例, 连享会 No.921. 王颖, 2022, Python:多进程、多线程及其爬虫应用, 连享会 No.935. 王颖, 2022, Python:爬取动态网站, 连享会 No.932. 秦利宾, 2020, Python:爬取上市公司公告-Wind-CSMAR, 连享会 No.131. 秦利宾, 2021, Python:爬取巨潮网公告, 连享会 No.646. 秦利宾, 许梦洁, 2021, Python+Stata:如何获取中国气象历史数据, 连享会 No.793. 范思妤, 2023, Python:基于selenium爬取科创板审核问询, 连享会 No.1172. 许梦洁, 2020, Python: 6 小时爬完上交所和深交所的年报问询函, 连享会 No.104. 许梦洁, 2021, Python爬虫:从SEC-EDGAR爬取股东治理数据-Shareholder-Activism, 连享会 No.744. 许梦洁, 2021, Python爬虫:爬取华尔街日报的全部历史文章并翻译, 连享会 No.743.
陈卓然, 2023, Python:爬虫雅虎财经数据-selenium, 连享会 No.1306. 陈波, 郑静怡, 江鑫, 2021, 在Stata里点首歌吧:imusic, 连享会 No.666.


连享会微信小店上线啦!
Note:扫一扫进入“连享会微信小店”,你想学的课程在这里······


New! Stata 搜索神器:
lianxh和songblGIF 动图介绍搜: 推文、数据分享、期刊论文、重现代码 ……👉 安装:. ssc install lianxh. ssc install songbl👉 使用:. lianxh DID 倍分法. songbl all

🍏 关于我们
连享会 ( www.lianxh.cn,推文列表) 由中山大学连玉君老师团队创办,定期分享实证分析经验。 直通车: 👉【百度一下:连享会】即可直达连享会主页。亦可进一步添加 「知乎」,「b 站」,「面板数据」,「公开课」 等关键词细化搜索。

夜雨聆风