如何检查是否存在URL列表

时间:2017-11-07 14:55:02

标签: python

我试图测试是否存在一个简单的网址列表,当我只测试一个网址时代码可以正常工作,但是当我尝试添加网址数组时,它会中断。

知道我做错了什么吗?

单个网址代码

import httplib
c = httplib.HTTPConnection('www.example.com')
c.request("HEAD", '')
if c.getresponse().status == 200:
   print('web site exists')

破碎的数组代码

import httplib
Urls = ['www.google.ie', 'www.msn.com', 'www.fakeniallweb.com', 'www.wikipedia.org', 'www.galwaydxc.com', 'www.foxnews.com', 'www.blizzard.com', 'www.youtube.com']
for x in Urls:
    c = httplib.HTTPConnection(x)
    c.request("HEAD", '')
    if c.getresponse().status == 200:
        print('web site exists')
    else:
        print('web site' + x + 'un-reachable')

#To prevent code from closing
input ()

2 个答案:

答案 0 :(得分:0)

问题不在于您是否将其作为数组执行,而是您的某个网址(www.fakeniallweb.com)与其他网址存在不同的问题。

我认为因为DNS无法解析,所以不能像你一样请求HEAD。所以除了检查响应代码200之外,还需要额外的检查。

也许你可以这样做:

try:
c.request("HEAD", '')
if c.getresponse().status == 200:
    print('web site exists')
else:
    print('website does not exist')
except gaierror as e:
    print('Error resolving DNS')

老实说,我怀疑你会发现网站返回不同状态代码的其他情况。例如,网站可能会返回3xx范围内的重定向内容,如果您无法访问,则返回403。这并不意味着该网站不存在。

希望这能帮到你的路!

答案 1 :(得分:0)

@Dries De Rydt

感谢您的帮助,这是一个未解决的dns错误导致它崩溃。

我结束了Lib/socket.py

<强>溶液

import socket
Urls = ['www.google.ie', 'www.msn.com', 'www.fakeniallweb.com', 'www.wikipedia.org', 'www.galwaydxc.com', 'www.foxnews.com', 'www.blizzard.com', 'www.youtube.com']
for x in Urls:
    try:
        url = socket.gethostbyname(x)
        print x + ' was reachable '
    except socket.gaierror, err:
        print "cannot resolve hostname: ", x, err
#To prevent code from closing
input ()

感谢您的帮助。

相关问题