共计 3916 个字符,预计需要花费 10 分钟才能阅读完成。
爬虫网络申请模块 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 request
from urllib import parse
import json
key = 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',
}
# 指标 url
url = '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 requests
import json
# 指标 url
url = '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 requests
import random
# 单个 ip
url = 'http://httpbin.org/ip' # 查问外网 ip 的网站
proxy = {'https': '219.159.38.198:56210' # 是须要 https 是吗?为什么老师的是 http?}
res = requests.get(url, proxies=proxy)
print(res.text)
# 多个 ip
ips = [('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)