用Python检查URL
我试图测试一个完整的网站列表,看看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
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