【问题标题】:What's the fastest way to check a webpage's status?检查网页状态的最快方法是什么?
【发布时间】: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


【解决方案1】:

您提到的三个库很好地涵盖了所有直接选项。 Requests.py 可能是 #4 候选。

请注意,Mechanize 包装了 URLLib2,而 Requests 使用了 URLLib3。

作为问题的 cmets,这些都是成熟的库,因此您可能不太可能在其他库中或通过重新实现自己找到性能改进。

不过,如果这是你的目标,那么这可能就是前进的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多