爬虫网络申请模块Urllib案例补充+Requests上

有道翻译

1. 学习指标
(1)学习应用urllib发送post申请
(2)与requests模块进行比照
(3)制作翻译小软件
2. 学习思路
(1)取得指标url: XHS界面
(2)向指标url发送申请,失去响应
(3)失去数据之后进行数据分析
3. 注意事项
(1)如果urllib发送post申请须要携带数据data 有中文须要提前解决 携带的数据类型必须是bytes 还要留神编码方式
(2)有道翻译中的指标url须要删去_o
(3)应用json解析数据 能够将json类型的字符串转换为python类型的字典

Requests模块

1.装置形式
windows+R --> cmd --> pip install requests -i https://pypi.tuna.tsinghua.ed... (清华源,也能够抉择其余)
2.Requests模块与Urllib模块的比照
(1)requests模块不须要解决中文
(2)requests模块不须要拼接url地址
(3)requests间接用get形式就能够传递headers
3.requests.get()与requests.post()

Requests设置代理ip

1.作用
(1)暗藏实在的ip
(2)反爬策略
2.匿名度级别
(1)通明 服务器晓得你应用了代理ip 并且晓得你的实在ip
(2)匿名 服务器晓得你应用了代理ip 但不晓得你的实在ip
(3)高匿 服务器不晓得你应用了代理ip 也不晓得你的实在ip
3.如何查问ip
(1)windows+R --> cmd --> ipconfig 内网ip 公有的地址 局域网
(2)https://www.ipip.net/或者http://httpbin.org/ip 外网ip 可能用于上网

代码

(1)代码 translation
应用urllib发送post申请制作翻译小软件

from urllib import requestfrom urllib import parseimport jsonkey = input('请输出要翻译的内容:')header = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',}# 指标urlurl = 'https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'# 须要先在搜寻框中输出 奥运会等词 而后进行查看 抉择XHR界面# https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule 中的_o须要删去# 须要数据data 同时将找到的数据转换为字典格局 (正则)data1 = {    'i': key,    'from': 'AUTO',    'to': 'AUTO',    'smartresult': 'dict',    'client': 'fanyideskweb',    'salt': '16286645140562',    'sign': '89f380e8a9fec83b350152556662570b',    'lts': '1628664514056',    'bv': 'e8f74db749b4a06c7bd041e0d09507d4',    'doctype': 'json',    'version': '2.1',    'keyfrom': 'fanyi.web',    'action': 'FY_BY_REALTlME',}data2 = parse.urlencode(data1)data3 = bytes(data2, encoding='utf-8')# 1.创立申请对象req = request.Request(url, headers=header)# 2.发送申请 获取响应res = request.urlopen(req, data=data3)  # 携带数据# 3.获取响应对象的内容html = res.read().decode('utf-8')# json.loads() 能够将json类型的字符串 转换为python类型的字典trans_dict = json.loads(html)translateResult = trans_dict['translateResult']print(translateResult[0][0]['tgt'])

(2)代码 requests_get(requests的入门)

import requests# 指标url = 'https://tieba.baidu.com/f?kw=%E5%A5%A5%E8%BF%90%E4%BC%9A&pn=50'# 第一种形式url = 'https://tieba.baidu.com/f?'# # url为基准的url 不蕴含任何参数params = {    'kw': '奥运会',    'pn': '50',}# params以键值对的模式来增加参数headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',}r = requests.get(url, params=params, headers=headers)print(r.text)# 第二种形式url = 'https://qq.yh31.com/zjbq/2920180.html'  # 非凡而好玩的网站header = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',}res = requests.get(url, headers=header)res.encoding = 'utf-8'print(type(res.text), res.text)  # str"""res.content 间接从网上抓取数据 没有做任何的解决 没有做任何的解码 二进制res.text 是requests模块将res.content解码之后失去的字符串 requests,模块会猜一个解码形式 有可能对 有可能不对 encoding"""

(3)代码 requests_post(有道翻译)

import requestsimport json# 指标urlurl = 'https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'header = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',}key = input('请输出要翻译的内容:')data1= {    'i': key,    'from': 'AUTO',    'to': 'AUTO',    'smartresult': 'dict',    'client': 'fanyideskweb',    'salt': '16282514891344',    'sign': 'af688b091ae35b8aa6fca61de6417e58',    'lts': '1628251489134',    'bv': '5b3e307b66a6c075d525ed231dcc8dcd',    'doctype': 'json',    'version': '2.1',    'keyfrom': 'fanyi.web',    'action': 'FY_BY_REALTlME',}res = requests.post(url, data=data1, headers=header)html = res.content.decode('utf-8')# json.loads() 能够将json类型的字符串 转换为python类型的字典trans_dict = json.loads(html)translateResult = trans_dict['translateResult']print(translateResult[0][0]['tgt'])

(4)代码 requests_ip 设置代理ip

import requestsimport random# 单个ipurl = 'http://httpbin.org/ip'  # 查问外网ip的网站proxy = {    'https': '219.159.38.198:56210'  # 是须要https是吗? 为什么老师的是http?}res = requests.get(url, proxies=proxy)print(res.text)# 多个ipips = [('180.113.13.110:5412'), ('36.62.195.231:36410'), ('100.127.77.167:36410'), ('117.57.22.179:36410')]for i in range(4):    try:        proxy = random.choice(ips)        res = requests.get(url, proxies={'https': proxy}, timeout=0.3)        print(res.text)    except Exception as e:        print('出现异常:', e)