排序维基百科链接列表

时间:2011-02-03 16:55:52

标签: python perl http bash wikipedia

我在明文文件中有很长的维基百科链接列表。每个链接由换行符分隔并进行百分比编码。不幸的是,大量这些链接已经过时;一些是重定向,其他已被删除。是否有自动排序链接,解决重定向和删除死链接?

bash / python脚本会很好,但任何其他工作实现都可以。

3 个答案:

答案 0 :(得分:4)

使用Perl和LWP::UserAgent应该很容易:

#!/usr/bin/perl
use LWP::UserAgent;    

open my $fh, "links.txt" or die $!;
my @links = <$fh>;
my $ua = LWP::UserAgent->new;

for my $link (@links) {
    my $resp = $ua->get($link); # automatically follows redirects    
    if ($resp->is_success) {
        print $resp->request->uri, "\n";
    }    
}

答案 1 :(得分:4)

python mechanize很不错:

import mechanize

links = [
"http://en.wikipedia.org/wiki/Markov_chain",
"http://en.wikipedia.org/wiki/Dari",
"http://en.wikipedia.org/wiki/Frobnab"
]

br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0')] # A white lie

for link in links:
    print link
    try:
        br.open(link)
        page_name = br.title()[:-35].replace(" ", "_")
        if page_name != link.split("/")[-1]:
            print "redirected to:", page_name
        else:
            print "page OK"
    except mechanize.URLError:
        print "error: dead link"

答案 2 :(得分:1)

这不会检查链接是否是重定向,但会检查所有链接。重定向将被视为有效链接(只要找到重定向的页面,显然)。只需按照您希望的方式修复打印,即可获得所需的输出。

#!/usr/bin/python
from urllib import urlopen

f = open('links.txt', 'r')

valid = []
broken = []

for line in f:
  try:
    urlopen(line)
    valid = valid + [line]
  except:
    broken = broken + [line]

for link in valid:
  print "VALID: " + link

for link in broken:
  print "BROKEN: " + link

如果您想知道哪些有效链接是重定向,您可以使用urllib.FancyURLopener()来完成,但我从未使用它,因此无法确定。