我需要扫描一组给定的URL并在Python中获取类似“200 OK”的HTTP状态代码。我目前正在使用urllib来做到这一点。有更快的方法吗?
def get_status(url):
try:
return urllib.urlopen(url).getcode()
except StandardError :
return None
答案 0 :(得分:4)
夫妻言论我会为更快乐的状态检查做出准备。第一个提示是使用http HEAD
方法。这要求服务器只提供http标头(包括状态代码),而不是它也为页面正文提供服务。
第二个urllib有效,但我建议使用精彩的Requests库,它提供了一个更好的API,几乎可以用于你想用http做的一切。
最后,我会使用gevents库让您以异步方式下载每个标头,从而大大加快整个过程。
答案 1 :(得分:2)
您可能希望以非阻塞方式并行执行此操作。在这里查看eventlet库:http://eventlet.net/。您只需从首页http://eventlet.net/#web-crawler-example获取示例。
答案 2 :(得分:1)
是的。
答案 3 :(得分:1)
对于速度,请尝试使用GRequests异步检查网址(不是一次检查网址)。
import grequests
urls = [
'http://www.heroku.com',
'http://tablib.org',
'http://httpbin.org',
'http://python-requests.org',
'http://kennethreitz.com'
]
rs = (grequests.get(u) for u in urls)
# For even faster status code checks, use the HEAD method instead of GET
# rs = (grequests.head(u) for u in urls)
for r in grequests.map(rs):
print r.status_code, r.url
200 http://www.heroku.com/
200 http://tablib.org/
200 http://httpbin.org/
200 http://docs.python-requests.org/en/latest/index.html
200 http://kennethreitz.com/
答案 4 :(得分:0)
使用线程。将代码放在Thread类中,并将结果存储在全局对象中。打电话给一堆线程。