1. urllib.request
1.1 版本
- python2 :urllib2、urllib
- python3 :把urllib和urllib2合并,urllib.request
1.2 常用方法
- urllib.request.urlopen(“网址”) 作用 :向网站发起一个请求并获取响应
- 字节流 = response.read()
- 字符串 = response.read().decode(“utf-8”)
- urllib.request.Request"网址",headers=“字典”
1.3 响应对象 response 的方法
- read() 读取服务器响应的内容
- getcode() 返回HTTP的响应码
- geturl() 返回实际数据的URL(防止重定向问题)
import urllib.request
url = 'https://www.yuque.com/docs/share/95002244-0097-4da2-b44c-53a9f69ce3a0?#'
# response 是响应对象
response = urllib.request.urlopen(url)
print(response.getcode(),response.geturl())
- 结果显示:
使用流程:
- 利用Resquest()方法构建请求对象
- 利用urlopen()方法获取响应对象
- 利用响应对象中的read().decode(‘utf-8’)中的内容
- 举例:进入 百度官网(http://ww.badu.com)
import urllib.request
url = 'https://www.baidu.com/'
headers = { # 在任意百度页面下获取
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
# 创建请求对象
req = urllib.request.Request(url,headers=headers)
# 获取响应对象
response =urllib.request.urlopen(req)
# 读取响应对象内容
html = response.read().decode('utf-8')
print(html)
2. urllib.parse
- 设置编码
- urlencode() --传入的是字典
- quote() – 传入的是单个字符串
2.1 urlencode()
2.2 quote()
3. 请求方式
3.1 GET
- 特点 :查询参数在URL地址中显示
3.2 POST
- 在Request方法中添加data参数
- dataurllib.request.Request(url,data=data,headers=headers)
- data :表单数据以bytes类型提交,不能是str
4. request模块
4.1 安装
- pip install requests
- 在开发工具中安装
- File | Settings | Project: Python_Space | Python Interpreter
- 点击 ‘+’ 号,输入要安装的模块,点击下方 Install Package
4.2 request常用方法
- requests.get(url)
- requests.post(url,data=None,headers=……)
4.3 响应对象response的方法
- response.text 返回unicode格式的数据(str)
- response.content 返回字节流数据(二进制)
- response.content.decode(‘utf-8’) 手动进行解码
- response.url 返回url
- response.encode() = ‘编码’
4.4 发送post请求
- 以有道翻译为例
import json
import requests
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
key = input("请输入你要翻译的内容:")
data = {
'i': key,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '15883243260471',
'sign': '1c78fd284dd4167388b13dd5a1823367',
'ts': '1588324326047',
'bv': '70244e0061db49a9ee62d341c5fed82a',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}
response = requests.post(url,data=data,headers=headers) # 发送post请求
response.encoding= 'utf-8'
html = response.text # print(type(html)) /<class 'str'>
# print(html) /{"type":"EN2ZH_CN","errorCode":0,"elapsedTime":1,"translateResult":[[{"src":"age","tgt":"年龄"}]]} 需转换为字典类型方便提取结果
# json.loads() 可将 str 类型的 html ——> dict 类型
result = json.loads(html)
# print(type(result)) # <class 'dict'>
print(result['translateResult'][0][0]['tgt'])
4.5requests设置代理
- 使用requests添加代理只需要在请求方法中(get/post)传递proxies参数就可以了
- 代理网站
- 西刺免费代理IP:http://www.xicidaili.com/
- 快代理:http://www.kuaidaili.com/
- 代理云:http://www.dailiyun.com/
# 代理网站
# 西刺免费代理IP:http://www.xicidaili.com/
# 快代理:http://www.kuaidaili.com/
# 代理云:http://www.dailiyun.com/ -- 比较麻烦
import requests
# 设置代理
proxy = {
'http':'116.196.85.150:3128'
}#从以上代理网站中寻找可用代理ip
url = 'http://www.httpbin.org/ip'
res = requests.get(url,proxies = proxy) #代理测试
print(res.text)
4.6 cookie
- cookie :通过在客户端记录的信息确定用户身份
- HTTP是一种无连接协议,客户端和服务器交互仅仅限于 请求/响应过程,结束后断开,下一次请求时,服务器会认为是一个新的客户端,为了维护他们之间的连接,让服务器知道这是前一个用户发起的请求,必须在一个地方保存客户端信息。
4.7 session
- session :通过在服务端记录的信息确定用户身份 这里这个session就是一个指的是会话
4.8 处理不信任的SSL证书
- 什么是SSL证书?
- SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能
import requests
url ='https://inv-veri.chinatax.gov.cn/'
# response = requests.get(url)
# print(response.text) # requests.exceptions.SSLError: HTTPSConnectionPool(host='inv-veri.chinatax.gov.cn', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)')))
response = requests.get(url,verify = False) # 指定尝试连接
print(response.text)# 成功
5. requests源码分析
转载:https://blog.csdn.net/qq_42149144/article/details/105841811
查看评论