技术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)