• Python 爬虫 --- urllib


    对于互联网数据,Python 有很多处理网络协议的工具,urllib 是很常用的一种。

    一、urllib.request,request 可以很方便的抓取 URL 内容。

    • urllib.request.urlopen(url)  返回请求 url 后的二进制对象·

        参数:url=‘http://www.baidu.com’,请求的 url。

           data=None,请求的数据,可有可无,bytes 类型。

           timeout=3,设置访问超时时间,可有可无

           cafile=None,HTTPS 请求 CA 证书

           capath=None,CA 证书 path

           context=None,指定 SSL 设置,可有可无,ssl.SSLContext 类型

    • urllib.request.Request()  把请求独立成一个对象,对请求参数的设定更方便灵活

        参数:url,请求 url。

           data=None,请求参数,可有可无

           headers={},请求 header 参数。

           origin_req_host=None,请求 host 或 IP

           unverifiable=False,表明请求是否无法验证,默认为 false

           method=None,请求方法,get、post、put 等

    • urllib.request.ProxyHandler()  设置代理,参数为 dict,如:{ 'http': '120.194.18.90:81'}
    • urllib.request.build_opener()  构建 Opener,参数为上面设置的代理
    • urllib.request.install_opener()  安装 Opener,参数为上面构建的 opener
    • urllib.request.HTTPCookieProcessor()  cookie 操作,参数为 http.cookiejar.CookieJar() 得到的 cookie
    from urllib import request,parse
    
    #url
    url = 'http://fanyi.baidu.com/sug'
    
    #request data
    data = {'kw': 'python'}
    data = parse.urlencode(data).encode('utf-8')
    
    #proxy
    proxy = {'http': '120.194.18.90:81'}
    proxy_handler = request.ProxyHandler(proxy)
    opener = request.build_opener(proxy_handler)
    request.install_opener(opener)
    
    #headers = {
    #    'Content-Length': len(data),
    #    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0'
    #}
    
    #req = request.Request(url=base_url, data=data, headers=headers)
    req = request.Request(base_url, data)
    
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:64.0) Gecko/20100101 Firefox/64.0')
    
    rsp = request.urlopen(req)
    
    result = rsp.read().decode('utf-8')
    
    print(result)
    #rsp 的属性
    print('返回数据类型: {}'.format(type(rsp)))
    
    print('返回数据信息: {}'.format(rsp))
    
    print('header 信息: {}'.format(rsp.info()))
    
    print('header 信息: {}'.format(rsp.getheaders()))
    
    print('header 属性信息: {}'.format(rsp.getheader('Server')))
    
    print('响应状态信息: {}'.format(rsp.status))
    
    print('响应状态信息: {}'.format(rsp.getcode()))
    
    print('响应的 URL: {}'.format(rsp.geturl()))
    #cookie 操作
    
    from urllib import request
    from http impot cookiejar
    
    #获取 cookie
    cookie = cookiejar.CookieJar()
    handler = request.HTTPCookieProcessor(cookie)
    opener = request.build_opener(handler)
    
    rsp = opener.open('http://www.baidu.com')
    res = rsp.read().decode('utf-8')
    
    print(res)
    
    #保存 cookie
    #FileCookieJar、MozillaCookieJar、LWPCookieJar,不同的保存格式
    filename = 'cookie.txt'
    cookie = cookiejar.MozillaCookieJar(filename)
    handler = request.HTTPCookieProcessor(cookie)
    opener = request.build_opener(handler)
    
    rsp = opener.open('http://www.baidu.com')
    
    cookie.save(igonre_discard=True, ignore_expires=True)
    
    #使用 cookie
    cookie cookiejar.MozillaCookieJar()
    cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
    handler = request.HTTPCookieProcessor(cookie)
    opener = request.build_opener(handler)
    rsp = opener.open('http://www.baidu.com')
    
    res = rsp.read().decode('utf-8')
    print(res)

    二、urllib.parse

    • urllib.parse.urlparse()  将 URL 解析成元组形式

        参数:

          url,访问 url

          scheme,解析协议,https、http

          allow_fragments=False,是够带有查询参数 

    • urllib.parse.urlunparse()  将元组拼接成完整 url
    • urllib.parse.urljoin()  拼接 url

      

    #1
    url = 'https://www.baidu.com/s?'
    qs = {'wd':'python'}
    
    qs = urllib.parse.urlparse(qs)
    full_url = url + qs
    
    #2
    url = urllib.parse.urlparse('http://www.baidu.com/s?wd=python')
    print(url)
    
    #3
    data = ['http', 'www.baidu.com', 's', 'wd=python']
    print(urllib.parse.urlunparse(data))
    
    #4
    print(urllib.parse.urljson('http://www.baidu.com', 'index.html'))

    三、urllib.error

      通过 try...except 可以捕捉异常,error 分为 HTTPError,URLError

    try:
        res = urllib.request.urlopen(url).open().decode('utf-8')
        print(res)
    except urllib.error.URLError as e:
        print(e)
    except urllib.error.HTTPError as e:
        print(e)
    except Exception as e:
        print(e)

    四、urllib.robotparser

  • 相关阅读:
    腾讯游戏是如何使用Docker的
    为Elasticsearch添加中文分词,对比分词器效果
    13个对web设计师有用的JavaScript插件
    七牛是如何搞定每天500亿条日志的
    七牛李道兵谈“架构坏味道”
    接口的解释
    数组
    Div Span
    dl dt dd
    @Razor解析器
  • 原文地址:https://www.cnblogs.com/rendd/p/10208182.html
Copyright © 2020-2023  润新知