Сортировка списка ссылок Википедии - PullRequest
1 голос
/ 03 февраля 2011

У меня длинный список ссылок на Википедию в текстовом файле. Каждая ссылка отделяется новой строкой и кодируется в процентах. К сожалению, большое количество этих ссылок устарели; некоторые перенаправления, а другие были удалены. Есть ли в любом случае автоматическая сортировка ссылок, устранение перенаправлений и удаление неработающих ссылок?

Сценарий bash / python был бы хорош, но любая другая работающая реализация в порядке.

Ответы [ 3 ]

4 голосов
/ 03 февраля 2011

питон 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"
4 голосов
/ 03 февраля 2011

Это должно быть легко с 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 голос
/ 03 февраля 2011

Это не проверит, является ли ссылка перенаправлением, но проверит все ссылки.Перенаправления будут считаться действительными ссылками (очевидно, если перенаправленная страница найдена).Просто исправьте печать любым способом, чтобы получить нужный вам вывод.

#!/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 (), но яникогда не использовал его, поэтому не может быть уверен.

...