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。不要滥用这个,堆栈溢出器!