【发布时间】:2014-01-28 17:15:27
【问题描述】:
我正在尝试使用 Python 检查网页的状态。我已经做了计时器来测试,但没有什么比另一个更好。最差的和最好的仅相差 20%。我真的只需要响应代码,而不是 HTML 源代码。我将处理 3 个响应代码:200、403、404。
方法 1 是我的,但其他方法在这里找到:Checking if a website is up via Python
方法一:现在,我正在使用 mechanize 打开 URL 并尝试使用 except。如果是 200,它会正常运行,但如果是 403/404,它会运行异常。这工作正常,但不是很快。平均速度为0.00276
方法2:使用urllib,我得到的时间和python差不多。平均速度为 0.00227。这是它的代码,它只是一个衬里。
print urllib.urlopen("http://www.stackoverflow.com").getcode()
方法 3:我认为这个 httplib 方法会最快,但它只检查域,它不检查域的各个页面,所以在我的情况下它不起作用。代码是:
conn = httplib.HTTPConnection("www.python.org")
conn.request("HEAD", "/")
r1 = conn.getresponse()
print r1.status, r1.reason
方法4:该方法使用requests.head,平均速度为0.00246。代码是:
r = requests.head("http://www.stackoverflow.com")
print r
有谁知道在 python 中检查网页状态的更有效方法?
【问题讨论】:
-
速度是什么意思,如“它的平均速度为 0.00246”?那是获取页面需要多长时间?单位是什么?
-
2 毫秒“不是很快”吗?
-
你的目标是什么?与网络时间相比,您在一种方法中获得的任何收益都将是微不足道的
-
每个方法都将使用 HTTP 协议发送相同的动词(HEAD),因为它基本上只意味着打开一个套接字并发送 HEAD /(非常少的字节)也得到非常少的字节,执行时间基本上取决于您的网络延迟。我怀疑你可以改进 Python 方面的任何东西。
-
FWIW,您当然也可以在#3 的请求中传递您喜欢的任何路径。但是对@RaphaelBraud 的评论 +1。
标签: python performance mechanize urllib python-requests