Python爬虫 Day 4
爬虫网络请求模块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 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',
}
# 目标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=https://www.it610.com/article/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=https://www.it610.com/article/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'])
【Python爬虫 Day 4】(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)
推荐阅读
- 赢在人生六项精进二阶Day3复盘
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 2019-01-17-晨读7期-直子Day25
- 21天|21天|M&M《见识》04
- 阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15|阿菘的ScalersTalk第五轮新概念朗读持续力训练Day15 20191025
- Python基础|Python基础 - 练习1