一只爬虫带你看世界【3】
6.实战two:有道翻译
准备工作,打开有道翻译的官网,输入“陪伴是最长情的告白”,点击翻译,则会出现英文的翻译。
此时在该页面上点击右键,选择查看元素,弹出的菜单栏中选network,再点击页面上的翻译,弹出的信息中选择第一个,在信息右侧会出现header等信息,截图如下:
截图反映了服务器与浏览器之间的数据交换。其中Headers信息中,General 中的Request URL是服务器真实地址,Request Method:POST,则是浏览器向服务器发送信息,并成功返回状态码 200,远程服务器地址为:61.135.217.28
Request URL是服务器真实地址:
区分是否人工和机器浏览网站信息的依据:Headers 中的 User-Agent 信息:
用户使用浏览器向服务器提交信息采用POST方式,在使用urllib.requst 函数时,提供其参数DATA信息。
其中 i: 为用户信息输入的部分。
----------------------------------------------------------------------------------------------------------------------
实战代码如下:
import urllib.request
import urllib.parse
import json
content = input("请输入需要翻译的内容:")
url ='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' # 实际服务器地址,通过headers查看
# data 部分为headers 中 FromData 中查看
data = {}
data['i'] = content
data['from'] = 'AUTO'
data['to'] = 'AUTO'
data['smartresult'] = 'dict'
data['client'] = 'fanyideskweb'
data['salt'] = '1507902676814'
data['sign'] ='f4bd4b3b948cbc76c913eafdd1853ed8'
data['doctype'] = 'json'
data['version']= '2.1'
data['keyfrom'] = 'fanyi.web'
data['action'] = 'FY_BY_CLICKBUTTION'
data['typoResult'] = 'true'
data =urllib.parse.urlencode(data).encode('utf-8')
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')
target = json.loads(html) # 使用到json解析,在文件头引入该json 文件
print('翻译结果:%s' %(target['translateResult'][0][0]['tgt']))
代码结果展示
----------------------------------------------------------------------------------------------------------------------
可能遇到的问题:出现{"errorCode":50}
解决的方案:去除url里面的_o字段,就可以解决问题
即:
url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom'
àurl ='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'