Python3 urllib使用

Python3 urllib使用

基本使用 get,post,timeout超时,异常

# 姓名: 刘帅
# 日期: 2018.11.18
# 功能: urllib.request.urlopen使用方法
from urllib.request import urlopen  # 请求网页
from urllib.parse import urlencode  # 字典转字符串转码
from urllib.error import URLError  # URLError错误


def urlA():  # GET请求
    res = urlopen('http://www.baidu.com')  # 打开指定url
    print(res.read().decode('utf8'))  # 输出响应内容
    print(type(res))  # 输出函数返回数据类型
    print(res.status)  # 输出响应状态码
    print(res.getheaders())  # 输出响应头
    print(res.getheader('Server'))  # 输出响应头Server内容 服务器信息
    return


def urlB():  # POST请求
    dataA = {'word': 'hello'}  # 定义post内容 参数word 值hello
    dataB = urlencode(dataA)  # 转化为字符串
    new_data = bytes(dataB, encoding='utf-8')  # 转码为字节流
    res = urlopen('http://httpbin.org/post', data=new_data)  # post请求 new_data为post数据
    print(res.read().decode('utf-8'))  # 输出响应内容
    return


def urlC():  # 设置timeout超时时间
    try:  # 异常处理
        res = urlopen('http://httpbin.org/', timeout=0.1)  # 打开指定url, 设置超时时间0.1秒 超时跑出异常
    except URLError as err:  # 异常处理方法
        print(err.reason)
    else:  # 未抛出异常则执行
        print(res.read().decode('utf8'))  # 输出响应内容
        print(type(res))  # 输出函数返回数据类型
        print(res.status)  # 输出响应状态码
        print(res.getheaders())  # 输出响应头
        print(res.getheader('Server'))  # 输出响应头Server内容 服务器信息
    return

Requset使用 get,post,验证,代理,Cookie保存读取,异常

# 姓名: 刘帅
# 日期: 2018.11.18
# 功能: urllib.request.Requset使用方法
from urllib.parse import urlencode  # 字典转字符串转码
from urllib.request import Request  # Request类
from urllib.request import urlopen  # 请求网页
from urllib.request import URLError  # URLError错误
from urllib.request import HTTPPasswordMgrWithDefaultRealm, HTTPBasicAuthHandler, build_opener  # 验证
from urllib.request import ProxyHandler  # HTTP代理
from http.cookiejar import CookieJar
from http.cookiejar import MozillaCookieJar
from http.cookiejar import LWPCookieJar
from urllib.request import HTTPCookieProcessor
from urllib.request import HTTPError


def urlA():  # get请求
    req = Request('http://httpbin.org/get')  # 创建填充Requset类
    res = urlopen(req)  # 通过Requset类请求网页
    print(res.read().decode('utf-8'))  # 输出响应内容
    return


def urlB():  # post请求
    headersA = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36'
                              ' (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
                'Host': 'httpbin.org'}
    dataA = {'word': 'hello'}  # 定义字典 参数word 值hello
    dataB = urlencode(dataA)  # 转化为字符串
    dataC = bytes(dataB, encoding='utf-8')  # 转码为字节流
    req = Request(url='http://httpbin.org/post', headers=headersA, data=dataC,
                  method='POST')  # 创建填充Requset类 data为post内容 headers为请求头 method请求方式
    # req.add_header('Host', 'httpbin.org')  # 通过add_headers添加请求头
    res = urlopen(req)  # 通过Requset类请求网页
    print(res.read().decode('utf-8'))  # 输出响应内容
    return


def urlC():  # 验证
    username = 'LiuShuai'  # 用户名
    password = 'Ls123456'  # 用户密码
    url = 'http://www.httpbin.org/basic-auth/LiuShuai/Ls123456'  # url网址
    p = HTTPPasswordMgrWithDefaultRealm()  # 创建HTTPPasswordMgrWithDefaultRealm对象
    p.add_password(None, url, username, password)  # 使用add_password添加账号密码
    auth_handler = HTTPBasicAuthHandler(p)  # 创建HTTPBasicAuthHandler对象 参数HTTPPasswordMgrWithDefaultRealm
    opener = build_opener(auth_handler)  # 构建Opener
    try:  # 异常处理
        res = opener.open(url)  # 打开连接完成验证返回登录后的页面
    except URLError as err:  # 异常处理方法
        print(err.reason)
    else:  # 未抛出异常执行
        print(res.read().decode('utf-8'))  # 输出返回内容
    return


def urlD():  # 代理
    url = 'http://httpbin.org/get'  # url网址
    proxy = {'http': 'http://111.202.37.195:38431',
             'https': 'https://111.202.37.195:38431'}  # 代理字典
    proxy_handler = ProxyHandler(proxy)  # 通过ProxyHandler使用字典生成handler
    opener = build_opener(proxy_handler)  # 构造opener
    try:  # 异常处理
        res = opener.open(url)  # 打开网址
    except URLError as err:  # 异常处理方法
        print(err.reason)
    else:  # 未异常则执行
        print(res.read().decode("utf-8"))  # 输出返回内容
    return


def urlE():  # Cookie 普通使用, 无法保存或读取文件
    cookie = CookieJar()  # 创建CookieJar类 无法保存或读取文件
    handler = HTTPCookieProcessor(cookie)  # 构建handler
    opener = build_opener(handler)  # 构建opener
    try:  # 异常处理
        res = opener.open('http://www.baidu.com')  # 打开连接
    except URLError as err:  # 异常处理方法
        print(err.reason)
    else:  # 未异常则执行
        for cke in cookie:  # 循环输出cookie 的key  value
            print(cke.name, cke.value)  # 循环输出cookie 的key  value
    return


def urlF():  # Cookie 高级使用, 可以保存或读取文件
    cookie = MozillaCookieJar('1.txt')  # 创建MozillaCookieJar类 可以保存或读取文件 传入文件名
    cookie.load('1.txt', ignore_expires=True, ignore_discard=True)  # 读取cookie文件
    handler = HTTPCookieProcessor(cookie)  # 构建handler
    opener = build_opener(handler)  # 构建opener
    try:  # 异常处理
        res = opener.open('http://www.baidu.com')  # 打开连接
    except URLError as err:  # 异常处理方法
        print(err.reason)
    else:  # 未异常则执行
        cookie.save(ignore_discard=True, ignore_expires=True)  # 保存cookie文件
        for cke in cookie:  # 循环输出cookie 的key  value
            print(cke.name, cke.value)  # 循环输出cookie 的key  value
    return


def urlG():  # Cookie 高级使用, 可以保存或读取文件
    cookie = LWPCookieJar('1.txt')  # 创建LWPCookieJar类 可以保存或读取文件 传入文件名
    cookie.load('1.txt', ignore_expires=True, ignore_discard=True)  # 读取cookie文件
    handler = HTTPCookieProcessor(cookie)  # 构建handler
    opener = build_opener(handler)  # 构建opener
    try:  # 异常处理
        res = opener.open('http://www.baidu.com')  # 打开连接
    except URLError as err:  # 异常处理方法
        print(err.reason)
    else:  # 未异常则执行
        cookie.save(ignore_discard=True, ignore_expires=True)  # 保存cookie文件
        for cke in cookie:  # 循环输出cookie 的key  value
            print(cke.name, cke.value)  # 循环输出cookie 的key  value
    return


def urlH():  # 异常捕获处理
    try:
        res = urlopen('http://cuiqingcai.com/index.htm')  # 打开一个不存在的页面 抛出Not Found 404
    except HTTPError as err:  # 异常处理方法 先捕获HTTPError
        print(err.reason, err.code, err.headers)
    except URLError as err:  # 异常处理方法 再捕获HTTPError
        print(err.reason)
    else:  # 未异常则执行
        print(res.read().decode('utf-8'))  # 输出请求到的内容
    return

parse使用 url分割合并,构建get参数,get参数转换为列表或元组,字符串转url编码

# 姓名: 刘帅
# 日期: 2018.11.18
# 功能: urllib.parse使用方法
from urllib.parse import urlparse  # 分解url为6个数据的元组
from urllib.parse import urlunparse  # 使用6个数据的元组构造url
from urllib.parse import urlsplit  # 分解url为5个数据的元组 忽略params
from urllib.parse import urlunsplit  # 使用5个数据的元组构造url 忽略params
from urllib.parse import urljoin  # url分解合并
from urllib.parse import urlencode  # 构造GET参数
from urllib.parse import parse_qs  # GET参数转回字典
from urllib.parse import parse_qsl  # GET参数转为元组组成的列表
from urllib.parse import quote  # 将内容转化为url编码格式
from urllib.parse import unquote  # 将url编码内容转化为普通字符


def urlA():  # urlparse使用方法 返回6个数据的元组
    res = urlparse('http://www.baidu.com/index.html;user?id=5#comment')  # 传入url
    print(type(res))  # 输出变量类型<class 'urllib.parse.ParseResult'>
    print(res)  # 输出url分解分段内容
    return


def urlB():  # urlparse的scheme参数使用方法 返回6个数据的元组
    res = urlparse('www.baidu.com/index.html;user?id=5#comment', scheme='http')  # 传入url scheme传入协议类型
    print(type(res))  # 输出变量类型<class 'urllib.parse.ParseResult'>
    print(res)  # 输出url分解分段内容
    return


def urlC():  # urlparse的fragments参数使用方法 返回6个数据的元组
    res = urlparse('www.baidu.com/index.html;user?id=5#comment', allow_fragments=False)
    # 传入url allow_fragments传入是否忽略fragments
    print(type(res))  # 输出变量类型<class 'urllib.parse.ParseResult'>
    print(res)  # 输出url分解分段内容 fragments为空
    return


def urlD():  # urlparse不包含 params query,并且忽略fragments 返回6个数据的元组
    res = urlparse('www.baidu.com/index.html;user?id=5#comment', allow_fragments=False)
    # 传入url allow_fragments传入是否忽略fragments
    print(type(res))  # 输出变量类型<class 'urllib.parse.ParseResult'>
    print(res)  # 输出url分解分段内容 fragments params query为空
    return


def urlE():  # urlparse,返回变量的使用方法 获取 返回6个数据的元组
    res = urlparse('http://www.baidu.com/index.html;user?id=5#comment')  # 传入url
    print(type(res))  # 输出变量类型<class 'urllib.parse.ParseResult'>
    print(res.scheme, res[0], res.netloc, res[1])  # 输出返回内容
    return


def urlF():  # url的构造 许6个数据的可迭代数据
    data = ['http', 'www.baidu', 'index.html', 'user', 'a=6', 'comment']  # 初始化列表
    res = urlunparse(data)  # 根据元组构造url
    print(res)  # 输出构造结果
    return


def urlG():  # urlsplitd的使用方法 忽略params合并进path内
    res = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')  # 分解返回url 返回5个数据的元组
    print(type(res))  # 输出变量类型<class 'urllib.parse.SplitResult'>
    print(res)  # 输出返回内容
    print(res.scheme, res[0], res.netloc, res[1])  # 输出返回内容 使用key或下标 获取
    return


def urlH():
    data = ['http', 'www.baidu.com', '/index.html;user', 'id=5', 'comment']
    res = urlunsplit(data)
    print(res)
    return


def urlI():  # urljoin使用
    print(urljoin('http://www.baidu.com', 'FAQ.html'))
    print(urljoin('http://www.baidu.com', 'https://cuiqingcai.com/FAQ.html'))
    print(urljoin('http://www.baidu,com/about.html', 'https://cuiqingcai/FAQ.html'))
    print(urljoin('http://www.baidu,com/about.html', 'http://cuiqingcai/FAQ.html?question=2'))
    print(urljoin('http://baidu.com?wd=abc', 'https://cuiqingcai/index.php'))
    print(urljoin('http://www.baidu.com', '?category=2#comment'))
    print(urljoin('www.baidu.com', 'category=2#comment'))
    print(urljoin('www.baidu.com#comment', '?category=2'))
    return


def urlJ():  # 使用urlencode,构建GET参数
    params = {'name': 'LiuShuai', 'age': '55'}  # get参数 参数key 值valude
    base_url = 'http://www.baidu.com?'  # 网址基址
    url = base_url + urlencode(params)  # 连接url与参数
    print(url)  # 输出完整url
    return


def urlK():  # GET参数的使用转换列表 元组
    query = 'name=LiuShuai&age=55'  # 创建一个get参数
    print(parse_qs(query))  # GET参数转回字典
    print(parse_qsl(query))  # GET参数转为元组组成的列表
    return


def urlL():  # 使用quote将字符串转化为url编码格式
    word = '壁纸'  # 定义字符串
    url = 'http://www.baidu.com/s?wd=' + quote(word)  # 将字符串转化为url编码格式
    print(url)  # 输出转化url编码格式合并后的url
    url = unquote(url)  # 将url转化为普通字符串
    print(url)  # 输出转化为普通字符串的url
    return

猜你喜欢

转载自blog.csdn.net/qq3546354/article/details/84296242