关于爬虫:Python爬虫-Day-4

291次阅读

共计 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)

正文完
 0