Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中扫描一组URL的最快方法是什么?_Python_Url_Wsgi - Fatal编程技术网

在Python中扫描一组URL的最快方法是什么?

在Python中扫描一组URL的最快方法是什么?,python,url,wsgi,Python,Url,Wsgi,我需要扫描一组给定的URL并获得HTTP状态代码,如Python中的“200OK”。我目前正在使用urllib来实现这一点。有没有更快的方法 Python代码 您可能希望以非阻塞的方式并行执行。在此处签出eventlet库:。您可以从首页抓取一个示例。您可能希望以非阻塞的方式并行执行。在此处签出eventlet库:。您可以从首页抓取一个示例。使用线程。将代码放在线程类中,并将结果存储在全局对象中。调用一组线程。使用线程。将代码放在线程类中,并将结果存储在全局对象中。调用一组线程。是的,有 使用多

我需要扫描一组给定的URL并获得HTTP状态代码,如Python中的“200OK”。我目前正在使用urllib来实现这一点。有没有更快的方法

Python代码
您可能希望以非阻塞的方式并行执行。在此处签出eventlet库:。您可以从首页抓取一个示例。

您可能希望以非阻塞的方式并行执行。在此处签出eventlet库:。您可以从首页抓取一个示例。

使用线程。将代码放在线程类中,并将结果存储在全局对象中。调用一组线程。

使用线程。将代码放在线程类中,并将结果存储在全局对象中。调用一组线程。

是的,有

  • 使用多个线程同时检查不同的URL
  • 使用原始套接字实现简单的HTTP请求。一旦收到200响应(或任何其他代码),就关闭连接,避免不必要的数据传输
  • 使用多个线程同时检查不同的URL
  • 使用原始套接字实现简单的HTTP请求。一旦收到200响应(或任何其他代码),就关闭连接,避免不必要的数据传输

  • 我想说几句话,以便更快更快乐地检查状态。第一个技巧是使用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/