我在明文文件中有很长的维基百科链接列表。每个链接由换行符分隔并进行百分比编码。不幸的是,大量这些链接已经过时;一些是重定向,其他已被删除。是否有自动排序链接,解决重定向和删除死链接?
bash / python脚本会很好,但任何其他工作实现都可以。
答案 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()来完成,但我从未使用它,因此无法确定。