在学习网络爬虫的过程中,实现了用爬虫在某在线翻译网站上进行翻译的作用,不用调用该网站的官方api即可获得翻译的结果。

首先是常规的操作:
导入我们进行爬虫所需要的包

python代码在线翻译 python在线翻译器_Python爬虫实现翻译


接着我们打开该网站的网站。http://fanyi.youdao.com/

随便输入一个英文进行翻译(此行为是为了帮助我们便于找到数据的传输方式)

按F12打开审查元素,接着,将一个英文进行翻译。

python代码在线翻译 python在线翻译器_Python爬虫实现翻译_02


我们可以看到这样的界面。

然后点击右边的network

打开第三个文件(文件名为http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule)我们可以在这里面看到这个Request URL,这个URL其实才是我们进行翻译的界面,这个界面对于我们进行翻译十分重要。

同时,记录下这个页面的Form Data,这个是为了后面我们进行操作的方便

python代码在线翻译 python在线翻译器_python实现翻译语句功能_03


完成了这些工作后,就开始了我们代码的书写。

1.进行网页的爬取

这里注意,url不为我们最开始的那个页面,因为那个页面其实并没有实现我们的翻译功能,只是在翻译功能完成之后又跳转回了这个页面。真正的翻译页面在Request URl里面,所以这里为:http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rul
(这里注意,原本的里面translate?应该为translate_o?,_o之后我们的爬虫会爬取失败,原因是因为可能增加了反扒机制,去掉这个_o即可以完成我们的功能。)
其次,我们要把Form Data里面的数全部以一个字典的形式存放进来,记作Data,这样是为了使得爬虫能够代替我们实现翻译的动作。
完整代码如下:

import urllib.request as test
import urllib.parse
import json
a=input("你想要翻译的话\n")
b=str(a)
url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
data={}
data['i']= b
data['from']='AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='15738863650513'
data['sign']='d1679873f7459843b7270f75acf0c6f0'
data['ts']='1573886365051'
data['bv']='75551116684a442e8625ebfc9e5af1ba'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_CLICKBUTTION'
data=urllib.parse.urlencode(data).encode('utf-8')
#print(data)
response=test.urlopen(url,data)
html=response.read().decode('utf-8')

if __name__=="__main__":
    print("翻译的结果为")
    target=json.loads(html)
    type(target)
    a=target["translateResult"][0][0]['tgt']
    print(a)

代码解释:

1.这里面的data就是将Form Data里面的值给以字典的形式给存起来了,这个目的就是为了实现爬虫替我们进行数据的传输,而不需要网页来帮我们进行传输。
2.然后data[‘i’]这个是我们的数据,也就是正常情况下会进行传输的数据的对应的标号。这里我们把他的值用我们手动输入的值来进行代替,这样来实现对我们输入的值进行翻译的功能。(因为楼主两张图截取和代码使用的时间不相同,所以data里面的数据都不相同,只要到时候自己的代码里面的data是自己当时的Form Data就可以了)
3.里面的encode是进行编码,decode是进行解码
4.同时,我们获得的html是一个Json结构,所以我们需要使用Json这个包来对他进行转化,转化完之后target是一个多重的字典与列表的数值(想看一下的同学可以直接print(target)一下),然后我们通过之前对字典和列表的方法将其不断的变小,最后精准的找到我们所需要找到的翻译的值a,然后对a进行输出。

代码运行效果:

python代码在线翻译 python在线翻译器_python实现翻译语句功能_04