zoukankan      html  css  js  c++  java
  • Python urllib与urllib2

      Python中包含了两个网络模块,分别是urllib与urllib2,urllib2是urllib的升级版,拥有更强大的功能。urllib,让我们可以像读文件一样,读取http与ftp。而urllib2,则在urllib的基础上,提供了更多的接口,如cookie、代理、认证等更强大的功能。

      urllib常用函数:

        1、urllib.urlopen(url[, data[, proxies]]):   打开一个网址,并返回一个类似于文件的对象,对于该对对象,我们可以执行以下操作。

        •   read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样;
        •     info():       返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息;
        •     getcode(): 返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到;
        •     geturl():    返回请求的url;

          参数中的data,表示以post方式提交到web的参数,proxies用于设置代理,这两个参数很少用到。

        2、urllib.urlretrieve(url[, filename[, reporthook[, data]]]):  将远程数据下载到本地。url,是网址,filename表示的是本地路径,用于存放下载的数据,reporthook,是一个回调函数,当连接到服务器时,或者获得数据时,将调用该函数,data,用于post的数据。

        3、urlcleanup()清除urlretrieve函数的缓存。

        4、urllib中的一些字符编码的辅助函数

        • urllib.quote(string[, safe]):  对字符串进行编码。参数safe指定了不需要编码的字符;
        • urllib.unquote(string) :       对字符串进行解码;
        • urllib.quote_plus(string [ , safe ] ) :  与urllib.quote类似,但这个方法用'+'来替换' ',而quote用'%20'来代替' '
        • urllib.unquote_plus(string ) :       对字符串进行解码;
        • urllib.urlencode(query[, doseq]):  将dict或者包含两个元素的元组列表转换成url参数。例如 字典{'name': 'dark-bull', 'age': 200}将被转换为"name=dark-bull&age=200"
        • urllib.pathname2url(path):           将本地路径转换成url路径;
        • urllib.url2pathname(path):           将url路径转换成本地路径

      针对上面的一个样例:

        

     1 # coding : UTF-8
     2 
     3 import urllib
     4 import re
     5 '''
     6 def getHtml(url):
     7     urlFile = urllib.urlopen(url)
     8     urllib.FancyURLopener
     9     print urlFile.getcode()
    10     return urlFile.read()
    11 
    12 def getJpg(html):
    13     reg = r'src="(http://.*?.jpg)"'
    14     index = 0
    15     imgre = re.compile(reg)
    16     jpgs = re.findall(imgre, html)
    17     for x in jpgs:
    18         print "url = %s    %d.jpg
    " % (x, index)
    19         urllib.urlretrieve(x, "C:UsersHawkDesktopjpg\%d.jpg" % index)
    20         index = index + 1
    21 
    22 
    23 html = getHtml(r"http://image.baidu.com/")
    24 print "Game Over   "*3
    25 '''
    26 
    27 data = 'name = ~a+3'
    28 
    29 data1 = urllib.quote(data)
    30 print data1 # result: name%20%3D%20%7Ea%2B3
    31 print urllib.unquote(data1) # result: name = ~a+3
    32 
    33 data2 = urllib.quote_plus(data)
    34 print data2 # result: name+%3D+%7Ea%2B3
    35 print urllib.unquote_plus(data2)    # result: name = ~a+3
    36 
    37 data3 = urllib.urlencode({ 'name': 'dark-bull', 'age': 200 })
    38 print data3 # result: age=200&name=dark-bull
    39 
    40 data4 = urllib.pathname2url(r'd:/a/b/c/23.php')
    41 print data4 # result: ///D|/a/b/c/23.php
    42 print urllib.url2pathname(data4)    # result: D:/a/b/c/23.php

      urllib2的常用函数:

        1、urllib2.urlopen(url[, data][, timeout])与urllib的函数一样

        2、urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable]),

          url:是网址、文件路径、ftp路径

          data:通过urllib.urlencode形成的字符串。

          header:请求头

          后两个参数:用于第三方的cookie,详情可参看官网。http://docs.python.org/2/library/urllib2.html#urllib2.BaseHandler

  • 相关阅读:
    mybatis中的foreach条件参数过多时,#和$效率比较
    Error creating bean with name 'persistenceExceptionTranslationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/dao/PersistenceExceptionTranslationAutoConfiguration
    ConfigurationProperties cannot be resolved to a type
    Java 注解 初探 (一)
    无题
    [转载]A cycle was detected in the build path of project
    20段代码
    在tomcat5中发布项目时,用IP地址+端口不能访问项目,而用localhost加端口时可以访问成功
    Cannot get connection for URL jdbc:oracle:thin:调用中无效参数
    mysql中表分类MyISAM和InnoDB的区别
  • 原文地址:https://www.cnblogs.com/wang-can/p/3591116.html
Copyright © 2011-2022 走看看