欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python3 urllib使用

程序员文章站 2024-02-23 17:30:58
...

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

相关标签: Python3 爬虫