python中的urllib库的学习

技术QQ交流群:294088839

# urllib 库 详解 http 请求库

# 什么是urllib
# urllib.request 请求模块
# urllib.error   异常处理模块
# urllib.parse   url解析模块 工具模块
# urllib.robotparser robots.txt 解析模块


# 相比Python2 变化
# python2
#    import urllib2
#    response =urllib2.urlopen('http://www.baidu.com')
# python3
#  import urllib.request 这个方法移动到了 request模块下
#  response = urllib2.request.urlopen('http://www.baidu.com')


# 基本函数讲解
# urlopen 函数
# urllib.request.urlopen(url,data,timeout)
# import urllib.request
# res = urllib.request.urlopen('http://www.baidu.com')
#  read() 方法 获取内容 decode 汉字编码
# print(res.read().decode('utf-8'))


# urlopen post方法  如果加上这个data 就是以post请求发送 不加就是 get
import urllib.parse
# import urllib.request
# data = bytes(urllib.parse.urlencode({'word':'hello'}), encoding='utf8')
# http://httpbin.org/post 这个网址用来做测试 很方便
# res = urllib.request.urlopen('http://httpbin.org/post', data=data)
# print(res.read())


# 第三个参数 超时的参数 timeout 设置超时时间
# import urllib.request
# res = urllib.request.urlopen('http://httpbin.org/get', timeout=1)
# print(res.read())


# error 抛出异常
# import socket
# import urllib.request
# import urllib.error
# try:
#     res = urllib.request.urlopen('http://httpbin.org/get', timeout=0.1)
# except urllib.error.URLError as e:
#     if isinstance(e.reason,socket.timeout):
#         print('Time out')


# 响应
# 响应类型
# import urllib.request
# res = urllib.request.urlopen('http://www.baidu.com')
# print(type(res))


# 状态码 响应头
# import urllib.request
# res = urllib.request.urlopen('http://www.python.org')
# # 状态码
# print(res.status)
# #  响应头
# print(res.getheaders())
# # 全部的 元组类型
# print(res.getheaders('Server'))


# 请求头 request
# 加入 headers
# from urllib import request, parse
# # Request 可以设置 headers头部
# headers = {
#     'User-Agent': 'Mozilla/4.0(compatible;MSIE 5.5;Windows NT)',
#     'Host': 'httpbin.org'
# }
# dict = {
#     'name': 'Germey'
# }
# data = bytes(parse.urlencode(dict), encoding='utf8')
# # 请求的时候 设置所有的信息 发送POST请求
# req = request.Request('http://httpbin.org/post', data=data, headers=headers, method='POST')
# response = request.urlopen(req)
# print(response.read().decode('utf-8'))


# Handler 代理  Cookie处理 高级方法
# import urllib.request
# # ProxyHandler() 设置代理  通过设置ip地址 防止网站封掉 自己的爬虫
# proxy_handler = urllib.request.ProxyHandler({
#     'http': '117.69.239.198:35750'
# })
# # build_opener() 添加代理
# opener = urllib.request.build_opener(proxy_handler)
# res = opener.open('http://www.httpbin.org/get')
# print(res.read())


# Cookie处理  把cookie 写进文本
# import http.cookiejar, urllib.request
# filenname = 'cookie.txt'
# MozillaCookieJar 一种保存cookie格式 LWPCookieJar另一种保存cookie格式
# cookie = http.cookiejar.LWPCookieJar(filenname)
# handler = urllib.request.HTTPCookieProcessor(cookie)
# opener = urllib.request.build_opener(handler)
# response = opener.open('http://www.baidu.com')
# # for i in cookie:
# #     print(i.name+"="+i.value)
# cookie.save(ignore_discard=True, ignore_expires=True)


# 读取cookie  如果你网站需要登录才能看 就可以这样来进行处理
# cookie = http.cookiejar.LWPCookieJar()
# cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
# handler = urllib.request.HTTPCookieProcessor(cookie)
# opener = urllib.request.build_opener(handler)
# response = opener.open('http://www.baidu.com')
# print(response.read().decode('utf-8'))


# 异常处理
# from urllib import request, error
# try:
#     request = request.urlopen('http://cuiqingcai.com/index.htm')
#  error 处理方法更多方法 可以才参考文档 code方法 状态 headers 头部 reason
# except error.URLError as e:
#     print(e.code)


# url 解析
# url urlparse 模块 url拆分
# from urllib.parse import urlparse
# urlparse 有第二个属性 scheme='https' 定义协议 第三个属性  allow_fragments=false 锚地连接# 后面的东西就不会分解了
# result = urlparse('http://www.baidu.com/index.html;url?id=5#comment')
# # 数据为 元组 类型
# print(type(result), result)


# urlunparse 函数 拼接url
# from urllib.parse import urlunparse
# data = ['http', 'www.baidu.com', 'index.html', 'user', 'a=6', 'comment']
# print(urlunparse(data))


# urljoin 函数 也是用来拼接url 把两个url进行拼接


# urlencode 函数 把一个字典对象转换成一个请求参数 get请求参数
# from urllib.parse import urlencode
# params = {
#     'name': 'json',
#     'age': 22
# }
# base_url = 'http://www.baidu.com?'
# url = base_url + urlencode(params)
# print(url)





你可能感兴趣的:(python)