在Python中扫描一组URL的最快方法是什么?
我需要扫描一组给定的URL并获得HTTP状态代码,如Python中的“200OK”。我目前正在使用urllib来实现这一点。有没有更快的方法 Python代码在Python中扫描一组URL的最快方法是什么?,python,url,wsgi,Python,Url,Wsgi,我需要扫描一组给定的URL并获得HTTP状态代码,如Python中的“200OK”。我目前正在使用urllib来实现这一点。有没有更快的方法 Python代码 您可能希望以非阻塞的方式并行执行。在此处签出eventlet库:。您可以从首页抓取一个示例。您可能希望以非阻塞的方式并行执行。在此处签出eventlet库:。您可以从首页抓取一个示例。使用线程。将代码放在线程类中,并将结果存储在全局对象中。调用一组线程。使用线程。将代码放在线程类中,并将结果存储在全局对象中。调用一组线程。是的,有 使用多
您可能希望以非阻塞的方式并行执行。在此处签出eventlet库:。您可以从首页抓取一个示例。您可能希望以非阻塞的方式并行执行。在此处签出eventlet库:。您可以从首页抓取一个示例。使用线程。将代码放在线程类中,并将结果存储在全局对象中。调用一组线程。使用线程。将代码放在线程类中,并将结果存储在全局对象中。调用一组线程。是的,有
我想说几句话,以便更快更快乐地检查状态。第一个技巧是使用http
HEAD
方法。这只要求服务器提供http头(包括状态代码),而不要求服务器也提供页面主体
第二个urllib可以工作,但我建议使用奇妙的库,它提供了一个更好的api,几乎可以满足您对http的所有要求
最后,我将使用该库使您能够异步下载每个标头,从而大大加快整个过程。为了更快地检查状态,我想说几句话。第一个技巧是使用http
HEAD
方法。这只要求服务器提供http头(包括状态代码),而不要求服务器也提供页面主体
第二个urllib可以工作,但我建议使用奇妙的库,它提供了一个更好的api,几乎可以满足您对http的所有要求
最后,我将使用该库使您能够异步下载每个标头,从而大大加快整个过程。为了提高速度,请尝试使用异步检查URL(而不是一次检查一个URL)
密码
输出
为了提高速度,请尝试使用异步检查URL(而不是一次检查一个URL)
密码
输出
是的,我可以使用线程。但问题是我在wsgi应用程序中使用此函数来扫描1000++URL。如果我使用全局对象来存储结果,我必须等到整个扫描完成。我愿意编写的网站将给我网关超时。是的,我可以使用线程。但问题是我在中使用此函数一个wsgi应用程序可以扫描1000++URL。如果我使用一个全局对象来存储结果,我必须等到整个扫描完成。我愿意编写的网站会给我一个网关超时。这个库可以通过easy_install获得吗?我使用openshift作为通行证,不能直接安装任何库。我建议使用pip over易于在本地安装。您可以轻松地将依赖项添加到openshift项目中:thanx以获取信息。难道您不知道任何库会异步扫描给定的URL数组吗?没有人告诉我怎么做?对不起,没有。我不知道。这个lib可以通过easy_安装获得吗?我使用openshift作为通行证,不能直接安装任何lib。我建议在本地使用pip而不是easy_安装。您可以轻松地将依赖项添加到openshift项目中:thanx以获取信息。难道您不知道任何库会异步扫描给定的URL数组吗?没有人告诉我怎么做?对不起,没有。我不知道。我认为http HEAD方法可以完成这项工作。谢谢你提供有关其他LIB的信息。我可能应该看看gevents。关于使用HEAD over GET的尖锐建议。聪明。我认为http HEAD方法可以完成这项工作。谢谢你提供有关其他LIB的信息。我可能应该看看gevents。关于使用HEAD over GET的尖锐建议。聪明。正如我所理解的,lib会在给出状态码之前隐藏整个页面。这是正确的吗?示例,是的;但是你可以很容易地看到你需要做什么样的更改。我会查看文档。我认为这可能会有所帮助。你认为libb可以通过easy_install获得吗?同一个头版上写着:
easy_install eventlet
。据我所知,lib会在给出状态代码之前隐藏整个页面。这是正确的吗?示例,是的;但是你可以很容易地看到你需要做什么样的更改。我正在查看文档。我认为这可能会有所帮助。你认为libb可以通过easy_install获得吗?同一个头版上写着:easy_install eventlet
。由于我正在编写wsgi应用程序,所以我无法实际使用线程。请告诉我是否可以在不构建全局应用程序的情况下使用它们对象,将扫描结果直接输出到网页。我目前正在使用第二种方法。由于我正在编写wsgi应用程序,因此无法实际使用线程。请告知我是否可以在不构建全局对象的情况下使用线程,以便将扫描结果直接输出到网页。我目前正在研究第二种方法。
def get_status(url):
try:
return urllib.urlopen(url).getcode()
except StandardError :
return None
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/