网络编程之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查询中。

原文地址:https://www.cnblogs.com/FlameLuo/p/9684508.html