• 网络编程之urllib和urllib2


        在可供使用的网络库中,urllib和urllib2可能是投入产出比最高的两个。它们让你能够通过网络访问文件,就像这些文件位于你的计算机一样。

        只需要一个简单的函数调用,就几乎可将统一资源定位符(URL)可指向的任何动作作为程序的输入。

        这种功能如果与模块re结合,可以下载网页、从中提取信息并自动生成研究报告。

         模块urllib和urllib的功能差不多,但是urllib2比较好一点。对于简单的下载,urllib是绰绰有余的。如果需要实现HTTP身份严重或者Cookie,或者编写扩展来处理自己的协议,则urllib是更好的选择。

        1.打开远程文件

         几乎可以像打开本地文件一样打开远程文件,差别是只能使用读取模式,以及使用模块urllib.request中的函数urlopen,而不是open(file)。

    >>> from urllib.request import urlopen
    >>> from = urlopen('http://www.python.org')

         如果连接到了网络,变量webpage将包含一个类似于文件的对象,这个对象与网页http://www.python.org相关联。

     注意: 

         要是在没有联网的情况下尝试使用模块urllib,可使用以file:打头的URL访问本地文件,如file:c: extsomefile.txt(别忘记对反斜杠进行转义)

         urlopen返回的类似于文件的对象支持方法close、read、readline和readlines,还支持迭代等

         假设要提取刚才所打开网页中链接About的相对URL,可使用正则表达式

    >>>import re
    >>>text = webpage.read()
    >>>m = re.search(b'<a href="([^"]+)" .*?>about</a>',text,re.IGNORECASE)
    >>>M.GROUP(1)
    '/about/'
    
    注意;如果网页发生变化,则需要修改使用的正则表达式

      

       2.获取远程文件

        函数urlopen返回一个类似于文件的对象,可从中读取数据。如果要让urllib替你下载文件,并将其副本存储在一个本地文件中,可使用urlretrieve。这个函数不返回一个类似于文件的对象,而返回一个格式为(filename,headers)的元组,其中filenmae是本地文件的名称(由urllib自动创建),而headers包含一些有关远程文件的信息。

        如果想要给下载的副本指定文件名,可通过第二个参数来提供。

        

    urlretrive('http://www.python.org' , ' C:\python_webpage.html ' )

        这将获取python官网的主页,并将其存储到文件C:python_webpage.html中。如果你没有指定文件名,下载的副本将会放在某个临时位置,可以使用临时函数open打开。但使用完毕后,你可能想将其删除,以免占用磁盘空间。要清空这样的临时文件,可调用函数urlcleanup且不提供任何参数,它将负责替你完成清空工作。

        一些实用的函数

        除了通过URL读取和下载文件之外,urllib还提供了一些用于操作URL的函数,如下所示:

        quote(string[, safe]):返回一个字符串,其中所有的特殊字符(在URL中有特殊意义的字符)都已替换为对URL友好的版本(比如将~ 替换为%7E)。如果要将包含特殊字符的字符串用作URL,这很有用。参数safe是一个字符串(默认为‘/’),包含不应像这样对其进行编码的字符。

        quote_plus(string[,safe]):类似于quote,但也将空格替换为加号。

        unquote(string):与quote相反

        unquote_plus(string[,safe]):与quote_plus相反

        urlencode(query[,doseq]) :将映射(如字典)或由包含两个元素的元组(形如(key,value))组成的序列转换为“使用URL编码的”字符串。这样的字符串可用于CGI查询中。

  • 相关阅读:
    BZOJ4779: [Usaco2017 Open]Bovine Genomics
    USACO比赛题泛刷
    BZOJ1977: [BeiJing2010组队]次小生成树 Tree
    LOJ #10132. 「一本通 4.4 例 3」异象石
    $O(n+log(mod))$求乘法逆元的方法
    BZOJ2226: [Spoj 5971] LCMSum
    数据库 | Redis 缓存雪崩解决方案
    中间件 | 微服务架构
    数据库 | SQL 诊断优化套路包,套路用的对,速度升百倍
    数据库 | SQL语法优化方法及实例详解
  • 原文地址:https://www.cnblogs.com/FlameLuo/p/9684508.html
Copyright © 2020-2023  润新知