zoukankan      html  css  js  c++  java
  • urllib模块

    urllib.request模块
        使用换头及代理打开网页
            # 需自行更改, 不用代理可以直接改成urllib.request.ProxyHandler({})
            opener = urllib.request.build_opener(urllib.request.ProxyHandler({'代理类型': '代理IP:端口号'})) 
            opener.addheaders = [('User-Agent', 'Mozilla......')]
            
            opener.open(url)
    
    
    
    urllib.urlretrieve模块
        直接将远程数据下载到本地。
    
        urllib.urlretrieve(url[, filename[, reporthook[, data]]])
        参数说明:
        url:外部或者本地url
        filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);
        reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。
        data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。
    
        例子:
            import urllib
            
            def cbk(a,b,c):
            
                '''回调函数
                @a: 已经下载的数据块
                @b: 数据块的大小
                @c: 远程文件的大小
                '''
                
                per = 100.0 * a * b / c
                if per > 100:
                    per = 100
                print('%.2f%%' % per)
                print('下载完成')
            
            addrs_url = get_pictrue(url)
            urllib.request.urlretrieve(addrs_url,filename,cbk)
            
            
    from urllib.parse import urlparse
        
        解析URL的内容    
            (1)rel =urlparse('http://www.baidu.com/index.html;user?id=5#comment')
            返回一个对象有6个属性
                                {
                                scheme = 'http'                 协议
                                netloc = 'www.baidu.com'         域名
                                path= 'index.html'                 路径
                                params = 'user'                 参数
                                query = 'id=5'                     查询条件
                                fragment = 'comment'            锚点
                                }            
            得出,标准链接格式:scheme://netloc/path;params?query#fragment
    2)rel = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')#将path和params合为一个参数path
            返回一个元组,也可以通过属性来获取值:
                    (scheme = 'http',netloc = 'www.baidu.com',path= 'index.html;user',query = 'id=5',fragment = 'comment')
                    
                    print(rel[0])        #打印http
                    print(rel.netloc)    #打印www.baidu.com
        
        构造URL的内容    
            (1)urlunparse(['http','www.baidu.com','index.html','user','id=5','comment'])
            返回一个字符串
                    http://www.baidu.com/index.html;user?id=5#comment
    2)urlunsplit(['http','www.baidu.com','index.html;user','id=5','comment']) #将path和params合为一个参数path
            返回一个字符串
                  http://www.baidu.com/index.html;user?id=5#comment
            
        
            
            
  • 相关阅读:
    VS2010的新特性:3.新要害词 Dynamic
    VS2010的新特性:1.可选参数
    VS2010的新特性:4.简化了对 Office API 对象的访问
    VS2010的新特性:2.命实参数
    Not beside my body,but inside my heart!
    Tears...
    首乘“子弹头”列车
    What doesn't kill me makes me stronger!
    HongKong Business Trip
    胃部不适,原来好辛苦!
  • 原文地址:https://www.cnblogs.com/7134g/p/11510523.html
Copyright © 2011-2022 走看看