这次我们模拟真实用户向服务器发送请求
爬虫步骤演示
浏览器真实用户向服务器发送请求
在有道翻译的在线翻译上使用翻译功能并查看浏览器是发送了什么数据给服务器,以便等等能模仿浏览器发送请求给服务器
在这里的网页使用了ajax技术异步向服务器发送请求,当点击翻译的时候,浏览器就向服务器发送请求
在浏览器按下F12,选中Network查看浏览器当前的相关网络请求信息
左下方选中翻译信息的请求
右下方查看浏览器当前请求发送的请求内容,可以看到浏览器的请求地址和请求方式还有请求数据,到时我们模仿浏览器发送请求给服务器时要用到这些数据
请求之后获得的服务器响应数据,因为在之前的请求头中设置了返回数据要求是json,所以返回来的数据为json格式
{"translateResult":[[{"tgt":"吻","src":"kiss"}]],"errorCode":0,"type":"en2zh-CHS","smartResult":{"entries":["","n. (Kiss) (匈牙利、美、罗马尼亚)基什(人名)\r\n","v. 吻,接吻;(风等)轻拂,轻触;(球)轻轻擦过(另一球)\r\n","n. 吻;(风等)轻拂;(一球与另一球)轻擦;小甜酥饼\r\n"],"type":1}}
将返回来的json整理一下,看得更加清楚
模拟浏览器真实用户向服务器发送请求
等待用户的输入
txt = input("请输入要翻译的内容:")
设置模拟浏览器发送请求给服务器时候用到的数据(这些数据由上一步获得)
# 设置请求地址
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
# 设置请求头信息
req_header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
}
# 设置请求数据
data = {
'i': txt,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '15929110878565',
'sign': '1d1d9f0591adb16ac8785ce540208db6',
'ts': '1592911087856',
'bv': 'cc652a2ad669c22da983a705e3bca726',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME'
}
请求数据加载好了之后就开始发送请求,这里就使用到了requests模块里面的post函数,获取到响应对象
res = requests.post(url=url, data=data,headers=req_header)
利用响应对象获取响应码
res = requests.post(url=url, data=data,headers=req_header)
解析数据
Requests 中有一个内置的 JSON 解码器,利用json()函数处理 JSON 数据,转换为列表,操作列表中的元素
js = res.json()
print("翻译结果:" + js['translateResult'][0][0]['tgt'] + '\n')
此时运行查看结果,成功操作转换后的列表元素