Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Python检查URL_Python_Url - Fatal编程技术网

用Python检查URL

用Python检查URL,python,url,Python,Url,我试图测试一个完整的网站列表,看看URL是否有效,我想知道哪些是无效的 import urllib2 filename=open(argfile,'r') f=filename.readlines() filename.close() def urlcheck() : for line in f: try: urllib2.urlopen() print "SITE IS FUNCTIONAL" exce

我试图测试一个完整的网站列表,看看URL是否有效,我想知道哪些是无效的

import urllib2

filename=open(argfile,'r')
f=filename.readlines()
filename.close()

def urlcheck() :
    for line in f:
        try:
            urllib2.urlopen()
            print "SITE IS FUNCTIONAL"
        except urllib2.HTTPError, e:
            print(e.code)
        except urllib2.URLError, e:
            print(e.args)
urlcheck()

我建议您使用请求库

您必须传递url

def urlcheck() :
    for line in f:
        try:
            urllib2.urlopen(line)
            print line, "SITE IS FUNCTIONAL"
        except urllib2.HTTPError, e:
            print line, "SITE IS NOT FUNCTIONAL"
            print(e.code)
        except urllib2.URLError, e:
            print line, "SITE IS NOT FUNCTIONAL"
            print(e.args)
        except Exception,e:
            print line, "Invalid URL"
需要考虑的一些边缘情况或事项

关于错误代码和HTTPError的一点信息

来自服务器的每个HTTP响应都包含一个数字“状态代码”。 有时,状态代码表示服务器无法运行 满足要求。默认处理程序将处理其中一些 响应,例如,如果响应是“重定向” 请求客户端从不同的URL获取文档, urllib2将为您处理此问题。对于那些它无法处理的,urlopen 将引发HTTPError。典型错误包括“404”页未显示 发现“403”请求被禁止,以及“401”身份验证 必需的

即使引发HTTPError,您也可以检查错误代码

因此,有时即使URL有效且可用,也可能会引发代码为403401等的HTTPError。 由于临时服务器错误,有时有效的URL会给出5xx
必须将url作为参数传递给urlopen函数

import urllib2

filename=open(argfile,'r')
f=filename.readlines()
filename.close()

def urlcheck() :
    for line in f:
        try:
            urllib2.urlopen(line) # careful here
            print "SITE IS FUNCTIONAL"
        except urllib2.HTTPError, e:
            print(e.code)
        except urllib2.URLError, e:
            print(e.args)
urlcheck()

我可能会这样写:

import urllib2

with open('urls.txt') as f:
    urls = [url.strip() for url in f.readlines()]

def urlcheck() :
    for url in urls:
        try:
            urllib2.urlopen(url)
        except (ValueError, urllib2.URLError) as e:
            print('invalid url: {}'.format(url))

urlcheck()
与OP的原始实现相比,有一些变化:

使用上下文管理器打开/关闭数据文件 从文件读取URL时,从URL中剥离换行符 使用更好的变量名 切换到更现代的异常处理样式 还捕获格式错误的URL的ValueError 显示更有用的错误消息 示例输出:

$ python urlcheck.py 
invalid url: http://www.google.com/wertbh
invalid url: htp:/google.com
invalid url: google.com
invalid url: https://wwwbad-domain-zzzz.com

你的代码怎么不工作?
import urllib2

with open('urls.txt') as f:
    urls = [url.strip() for url in f.readlines()]

def urlcheck() :
    for url in urls:
        try:
            urllib2.urlopen(url)
        except (ValueError, urllib2.URLError) as e:
            print('invalid url: {}'.format(url))

urlcheck()
$ python urlcheck.py 
invalid url: http://www.google.com/wertbh
invalid url: htp:/google.com
invalid url: google.com
invalid url: https://wwwbad-domain-zzzz.com