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

时间:2018-01-12 12:14:47

标签: python web-services url short-url

我想编写一个以archive.is(或archive.foarchive.liarchive.today)链接作为输入的函数,并提供原始网站的网址作为输出。

例如,如果输入为'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中做到这一点?

1 个答案:

答案 0 :(得分:1)

是的,您的方法可以适用于其他网站,但archive.is似乎可以保护他们的数据免受自动查询的影响,当我尝试curl,python(urllib2)时,我收到错误Empty reply from server。你需要像模仿真实浏览器的幻影一样的东西。我相信它只适用于少数查询,然后会显示验证码或给出错误。此外,他们似乎记录了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();
}