OpenRefine中如何获取301/302重定向目标URL并导出
实现方案
OpenRefine原生就支持这个需求,不用写额外的独立脚本,2000条数据快的话几分钟就能跑完,具体操作如下:
- 先把存了原始URL的CSV导入OpenRefine,记好存URL的列名,后面操作直接选对应列就行。
- 点URL列的下拉菜单,选「编辑列」→「基于此列添加新列」,新列名可以叫
final_url。 - 在弹出的表达式输入框里填下面的GREL代码:
value.fetch( headersOnly: true, followRedirects: true, headers: {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"} )[0]["url"]
- 点表达式窗口下方的「节流/重试」,把请求间隔设为500到1000毫秒,避免请求太频繁被网站拦截,点确定就会自动批量跑所有URL的重定向结果。
注意事项
- 上面的代码开了
headersOnly: true,只请求响应头不下载完整页面,速度最快。要是你同时需要抓页面的HTML内容,把这个参数改成false,从返回结果里取["content"]就是页面源码,["url"]还是最终重定向地址,一次请求就能搞定两个需求,不用重复发请求。 - 你举的NASA那个示例URL用这个代码跑,会正确返回重定向后的地址
https://pwg.gsfc.nasa.gov/stargaze/Ssolsys.htm,和手动在浏览器里打开的结果一致。 - 要是个别链接报错,先查下原始URL有没有写错,有没有需要登录才能访问的情况,把请求间隔再拉长点基本就能解决。
内容的提问来源于stack exchange,提问作者pmusser
相关产品推荐
相关产品推荐

