如何使用python从archive.is短链接中获取原始URL?

问题描述 投票:0回答:2

我想编写一个函数,它将

archive.is
(或
archive.fo
archive.li
archive.today
)链接作为输入,并给出原始站点的 URL 作为输出。

例如,如果输入是

'http://archive.is/9mIro'
,那么我希望输出是
'http://www.dailytelegraph.com.au/news/nsw/australian-army-bans-male-recruits-to-get-female-numbers-up/news-story/69ee9dc1d4f8836e9cca7ca2e3e5680a'

我怎样才能在Python中做到这一点?

python web-services url short-url
2个回答
2
投票

是的,你的方法可以适用于另一个网站,但是

archive.is
似乎可以保护他们的数据免受自动查询,当我尝试curl,python(urllib2)时,我收到错误
Empty reply from server
。你需要像 phantomjs 这样模仿真实浏览器的东西。我相信它只适用于少数查询,然后会显示验证码或给出错误。而且他们似乎记录了 ip 地址,甚至 phantomjs 在尝试了 curl 或 python 的同一台机器上也会出现错误。

这是有效的 phantomjs 代码:

var webPage = require('webpage');
var page = webPage.create();
var system = require('system');
var args = system.args;

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';

function getOriginalUrl(shortUrl, cb) {
  page.open(shortUrl, function(status) {
    //console.log(status);
    var url = page.evaluate(function(){
      return document.querySelector('form input').value;
    });
    cb(url);
  });
}

if (args.length > 1) {
  getOriginalUrl(args[1],function(url){
    console.log(url);
    phantom.exit();
  });
} else {
  console.log('Pass url');
  phantom.exit();
}

0
投票

我能够使用

archive.is
 连接到 
curl_cffi
,它使用了
curl-impersonate
的修改版本。

简而言之,该网站正在使用 SSL 握手指纹来检测用户代理欺骗,而构建这些库是为了规避该限制。

特别感谢@Misunderstood在另一个问题上的回答,它为我指明了正确的方向。

© www.soinside.com 2019 - 2024. All rights reserved.