从持久 URL 中获取 URL 重定向的有效方法
Efficient Way of Getting URL Redirect from Persistent URLs
我有一个数据集,其中有一个 URL 字段指示资源的位置。一些 URL 是持久的(例如句柄和 DOI),因此需要解析为它们的原始 URL。我主要使用 Python 并且到目前为止似乎有效的解决方案涉及使用 Requests HTTP library
.
import requests
var_output_url = requests.get("http://hdl.handle.net/10179/619")
var_output_url.url
虽然此解决方案有效,但它非常慢,因为我必须循环浏览约 4,000 个文件,每个文件大约有 2,000 URLs。有没有更有效的方法来解决 URL 重定向?
我在一批上测试了我当前的解决方案,花了将近 5 分钟;按照这个速度,我需要几天(13 天)的时间来处理所有批次 [...] 我知道,它不一定那么长,我可以 运行 并行
使用 HEAD
而不是 GET
应该只给你 headers 而不是资源 body,在你的例子中是 html 页面。如果您只需要解析 url 重定向,那么通过网络传输数据的时间会大大减少。使用参数 allow_redirects=True
允许重定向。
var_output_url = requests.head("http://hdl.handle.net/10179/619", allow_redirects=True)
var_output_url.url
>>> 'https://mro.massey.ac.nz/handle/10179/619'
我有一个数据集,其中有一个 URL 字段指示资源的位置。一些 URL 是持久的(例如句柄和 DOI),因此需要解析为它们的原始 URL。我主要使用 Python 并且到目前为止似乎有效的解决方案涉及使用 Requests HTTP library
.
import requests
var_output_url = requests.get("http://hdl.handle.net/10179/619")
var_output_url.url
虽然此解决方案有效,但它非常慢,因为我必须循环浏览约 4,000 个文件,每个文件大约有 2,000 URLs。有没有更有效的方法来解决 URL 重定向?
我在一批上测试了我当前的解决方案,花了将近 5 分钟;按照这个速度,我需要几天(13 天)的时间来处理所有批次 [...] 我知道,它不一定那么长,我可以 运行 并行
使用 HEAD
而不是 GET
应该只给你 headers 而不是资源 body,在你的例子中是 html 页面。如果您只需要解析 url 重定向,那么通过网络传输数据的时间会大大减少。使用参数 allow_redirects=True
允许重定向。
var_output_url = requests.head("http://hdl.handle.net/10179/619", allow_redirects=True)
var_output_url.url
>>> 'https://mro.massey.ac.nz/handle/10179/619'