zoukankan      html  css  js  c++  java
  • 【模块】:Urllib(一)

    Urllib模块

    1、模块说明

      Urllib库是Python中的一个功能强大、用于操作的URL,并在做爬虫的时候经常要用到的库。在Python2.X中,分Urllib库和Urllib库,Python3.X之后合并到Urllib库中,使用方法稍有不同,在此,本书中代码会以Python的新版,即Python3.X进行讲解,具体使用的是Python3.5.2。同时在本章中,我还会讲解如何处理异常等知识。

    2、快速使用Urllib爬去网页:

    导入对应的模块,读取网页内容

    # 导入模块urllib
    import urllib.request
    
    file = urllib.request.urlopen("http://www.baidu.com")      # 打开网页
    data = file.read()                                         # 读取所有页面所有内容
    dataline = file.readline()                                 # 读取第一行
    datalines = file.readlines()                               # 读取所有内容,列表形式存储,不推荐用此
    
    # 存储文件
    fhandle = open("baidu.html","wb")                        # 爬到的页面存储到本地
    fhandle.write(data)
    fhandle.close()
                                                    # 直接把网页存储到本地,适用于存储图片
    urllib.request.urlretrieve(url="https://www.cnblogs.com/",filename="cnblogs.html")
    urllib.request.urlcleanup()                     # urlretrieve执行后会产生一些缓存,清除
    
    # 其他使用
    print(file.info())                              # 爬取页面的相关信息
    print(file.getcode())                           # 打印网页的状态码
    print(file.geturl())                            # 当前url
    
    # 200
    # http://www.baidu.com

    网页的编码和解码(中文字符要进行编码)

    # 编码、解码
    import urllib.request
    
    url_quote = urllib.request.quote("http://www.sina.com.cn")
    print(url_quote)
    # http%3A//www.sina.com.cn
    
    url_unquote = urllib.request.unquote(url_quote)
    print(url_unquote)
    # http://www.sina.com.cn

    3、添加Headers属性:

    # 添加报头
    import urllib.request
    
    url = 'http://blog.csdn.net/weiwei_pig/article/details/51178226'
    req = urllib.request.Request(url)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')
    data = urllib.request.urlopen(req).read()
    

     

    4、设置超时时间:

    # 超时时间
    import urllib.request
    import logging
    
    for i in range(1,100):
        try:
            file = urllib.request.urlopen("http://www.baidu.com",timeout=1)
            data = file.read()
            print(len(data))
        except Exception as e:
            logging.error(e)
    

    5、Post提交数据:

    # post 提交
    import urllib.request
    import urllib.parse
    
    url = "http://www.iqianyue.com/mypost"
    postdata = urllib.parse.urlencode({
        "name":"ceo@iqianyue.com",
        "pass":"aA123456"
    }).encode("utf-8")         # 转化成byte类型
    req = urllib.request.Request(url,postdata)
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')
    data = urllib.request.urlopen(req)
    print(data.getcode())
    # 200
    

     

    6、代理服务器的设置:

    有时候同一个IP去爬取同一个网站上的页面,久了之后就会被网站屏蔽,这时就需要代理服务器了,可以从http://www.xicidaili.com/网站上去找代理服务器地址:

    代码示例:

    # 匿名代理
    def urs_proxy(proxy_addr,url):
        import urllib.request
        proxy = urllib.request.ProxyHandler({'http':proxy_addr})
        opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
        urllib.request.install_opener(opener)
        data = urllib.request.urlopen(url).read().decode('utf-8')
        return data
    
    proxy_addr = "182.92.242.11:80"
    data = urs_proxy(proxy_addr,"https://www.cnblogs.com/")
    print(len(data))
    # 39244

    7、异常处理URLError

    # 异常处理
    import urllib.request
    import urllib.error
    try:
        urllib.request.urlopen("http://www.githup.com")
    except urllib.error.HTTPError as e:
        print(e.code)
        print(e.reason)
        print(e)
    # 403
    # Forbidden
    # HTTP Error 403: Forbidden
    

    8、处理url

    import urlparse  #python2
    base_url = "http://192.168.1.66:8088"
    split = urlparse.urlsplit(base_url)
    print(split)
    # SplitResult(scheme='http', netloc='192.168.1.66:8088', path='', query='', fragment='')
    

      

  • 相关阅读:
    node.js 基础篇
    node.js 开发环境搭建
    Velocity VelocityEngine 支持多种loader 乱码问题
    tomcat集群及session共享
    上海支付宝终面后等了两周,没能收到offer却来了杭州淘宝的电话面试
    支付宝hr终面,忐忑的等待结果
    mysql 数据范围总结
    rsync同步文件(多台机器同步代码...)
    linux基础命令
    路飞学城项目之前后端交互,跨域问题
  • 原文地址:https://www.cnblogs.com/lianzhilei/p/7158702.html
Copyright © 2011-2022 走看看