Python 维基百科链接的排序列表
我在一个纯文本文件中有一长串维基百科链接。每个链接由一个换行符分隔,并进行百分比编码。不幸的是,这些链接中有大量已经过时;有些是重定向,有些已被删除。是否有自动排序的链接,解决重定向和删除死链接Python 维基百科链接的排序列表,python,perl,http,bash,wikipedia,Python,Perl,Http,Bash,Wikipedia,我在一个纯文本文件中有一长串维基百科链接。每个链接由一个换行符分隔,并进行百分比编码。不幸的是,这些链接中有大量已经过时;有些是重定向,有些已被删除。是否有自动排序的链接,解决重定向和删除死链接 bash/python脚本很好,但任何其他工作实现都很好。使用Perl和: #/usr/bin/perl 使用LWP::UserAgent; 打开我的$fh,“links.txt”或死亡$!; 我的@links=; my$ua=LWP::UserAgent->new; 我的$link(@links){
bash/python脚本很好,但任何其他工作实现都很好。使用Perl和:
#/usr/bin/perl
使用LWP::UserAgent;
打开我的$fh,“links.txt”或死亡$!;
我的@links=;
my$ua=LWP::UserAgent->new;
我的$link(@links){
我的$resp=$ua->get($link);#自动跟随重定向
如果($resp->is\u success){
打印$resp->request->uri,“\n”;
}
}
使用Perl和:
#/usr/bin/perl
使用LWP::UserAgent;
打开我的$fh,“links.txt”或死亡$!;
我的@links=;
my$ua=LWP::UserAgent->new;
我的$link(@links){
我的$resp=$ua->get($link);#自动跟随重定向
如果($resp->is\u success){
打印$resp->request->uri,“\n”;
}
}
这不会检查链接是否为重定向,但会检查所有链接。重定向将被视为有效链接(显然,只要找到重定向页面)。只要按照您想要的方式修复打印即可获得所需的输出
#!/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()进行,但我从未使用过,因此无法确定 这不会检查链接是否为重定向,但会检查所有链接。重定向将被视为有效链接(显然,只要找到重定向页面)。只要按照您想要的方式修复打印即可获得所需的输出
#!/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()进行,但我从未使用过,因此无法确定 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"
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"
这目前报告不存在的链接是有效的。啊,看起来维基百科实际上重定向了无效页面。抱歉,我现在没有时间写一个更好的版本,但我会看看明天是否可以。Michael的解决方案似乎有效,所以我不会尝试提出替代方案。这目前报告不存在的链接是有效的。啊,看起来维基百科实际上重定向了无效页面。很抱歉,我现在没有时间写一个更好的版本,但我会看看明天是否可以。Michael的解决方案似乎有效,所以我不会尝试提出替代方案。这似乎是我想要的!但是,是否可以只输出正确的URL而不是文章标题?e、 而不仅仅是
Dari(波斯语)'?
correct'相对URL位于每篇文章的末尾(如果有帮助的话),因为您总是可以将缺少的部分添加回:URL=”http://en.wikipedia.org/wiki/“+页面名称
。browser对象有一个.geturl()
方法,但它返回您输入的url,而不是重定向的url。唯一的问题是我需要用下划线替换空格。但是,因为这可以在任何文本编辑器中完成,所以这是一个没有意义的观点。非常感谢你的帮助!使用mechanize的荣誉。这也是我读这个问题时的第一个想法。此外,Ashton在Python脚本中用下划线替换空格也应该是一项繁琐的任务。你可以尝试像page_name=page_name.replace('','''.')这样的方法。我觉得有点不好,因为我不太喜欢这个br.addheaders=[('User-agent','Mozilla/5.0')]
trick。不要滥用这个,堆栈溢出器!这似乎是在做我想做的事!但是,是否可以只输出正确的URL而不是文章标题?e、 而不仅仅是Dari(波斯语)'?
correct'相对URL位于每篇文章的末尾(如果有帮助的话),因为您总是可以将缺少的部分添加回:URL=”http://en.wikipedia.org/wiki/“+页面名称
。browser对象有一个.geturl()
方法,但它返回您输入的url,而不是重定向的url。唯一的问题是我需要用下划线替换空格。但是,因为这可以在任何文本编辑器中完成,所以这是一个没有意义的观点。非常感谢你的帮助!使用mechanize的荣誉。这也是我读这个问题时的第一个想法。此外,Ashton在Python脚本中用下划线替换空格也应该是一项繁琐的任务。你可以尝试像page_name=page_name.replace('','''.')这样的方法。我觉得有点不好,因为我不太喜欢这个br.addheaders=[('User-agent','Mozilla/5.0')]
trick。不要滥用这个,堆栈溢出器!