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
上一篇: 自己写的java日志类和方法代码分享
下一篇: 淘宝IP地址库采集器c#代码