python 爬虫——有道翻译
一、网页解析打开有道翻译官网:通过F12,找到网络一栏,寻找”POST”请求,并在“消息头”下找到请求网址,即翻译的原网址 :观察“参数”一栏,在“数据表单”中找到了输入的字符串赋值给了参数“i”:观察“响应”一栏,在“响应载荷”中找到了输出的字符串:此处为字典格式,在代码分析中将对其进行解析。在“消息头”的“请求头”中找到“User-Agent”:不同设备对这一段的代码都不同,所以针对自己的设备
一、网页解析
打开有道翻译官网:
通过F12,找到网络一栏,寻找”POST”请求,并在“消息头”下找到请求网址,即翻译的原网址 :
观察“参数”一栏,在“数据表单”中找到了输入的字符串赋值给了参数“i”:
观察“响应”一栏,在“响应载荷”中找到了输出的字符串:
此处为字典格式,在代码分析中将对其进行解析。
在“消息头”的“请求头”中找到“User-Agent”:
不同设备对这一段的代码都不同,所以针对自己的设备,复制下这一段代码,用于后续代码编写,这是网站判断是否为爬虫的一个依据。
二、代码解析
- urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应。
- urllib.parse对URL进行操作,例如解析或者创建URL。解析Parsing使用urlparse()函数解析URL,返回的是一个ParseResult对象。
- JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON的数据格式其实就是python里面的字典格式,里面可以包含方括号括起来的数组,也就是python里面的列表。
- time是python自带的模块,用于处理时间问题,提供了一系列的操作时间的函数。
1. 输入参数:
针对表单数据进行编写,可加入输入提示,并将输入的值赋值给参数“i”:
2. 输出
层层解析字典:
通过输出不断测试解析结果,得到最终翻译结果:
3. 反爬虫
3.1 隐藏爬虫信息
粘贴之前复制的“User-Agent”,以此避开网站第一步爬虫检索:
3.2 设置时间间隔
此处设置时间间隔,模拟人工操作,避开爬虫检索:
3.3 获取后台url
连接后台url,避开网页展示网址:
三、结果展示
可见实验是成功的,完成了中英文之间的翻译。
四、代码展示
'''爬虫有道词典'''
import urllib.request
import urllib.parse
import json
import time
while True:
content=input('请输入需要翻译的内容(输入“ql”退出程序):')
if content=='ql':
break
#获取后台url
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
head={}
#隐藏爬虫信息
head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0'
#编辑表单
data={}
data['i']=content
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='15590456742344'
data['sign']='238073a9cc158731f9feea2f63589c3f'
data['ts']='1559045674234'
data['bv']='e2a78ed30c66e16a857c5b6486a1d326'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_CLICKBUTTION'
#确认新表单
data=urllib.parse.urlencode(data).encode('utf-8')
#传入url和data
req=urllib.request.Request(url,data,head)
#获得响应
response=urllib.request.urlopen(url,data)
html=response.read().decode('utf-8')
'''
print(html)
target=json.loads(html)
print(target)
print(target['translateResult'])
print(target['translateResult'][0][0])
print(target['translateResult'][0][0]['tgt'])
'''
target=json.loads(html)
#获取结果
print('翻译结果:%s'%(target['translateResult'][0][0]['tgt']))
#设置间隔时间
time.sleep(5)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)