爬虫那些事(二)

这两天花了些时间写了一个关于翻译的爬虫,平时在看英文文献的时候需要用到翻译,但有时候感觉翻译出来的不是味道,然后又切换去另一个翻译页面再次翻译,感觉十分的麻烦,所以我便用爬虫爬取了欧路词典,有道翻译,百度翻译,谷歌翻译,并且将信息整合一起输出。

1 爬取欧路词典

之所以选择爬取欧路词典,是因为我以前用过,感觉翻译的效果也还不错,话不多说,直接上代码

def olu(content):
    data={'to':'zh-CN','from':'en','text':content}
    response=requests.post(url_olu,data=data,headers=oluheaders)
    baidu_result=response.text
    print('\n欧路词典:',baidu_result)

怎么样是不是看起来很简单,欧路词典的data数据很简单来源于审查元素network的xhr文件里的Headers,from代表输入的语言类型,to代表输出的语言类型,text即为输入的内容,基本上所有的信息都在审查元素network的xhr文件里,最后response的文本就是返回的翻译内容,获取文本即可。

2 爬取有道词典

同样爬取有道词典我们也要获取审查元素里network的xhr文件,不过有道翻译做了一点反爬机制,如果你按照它的request url输入会得到一个error的报错,需要对此进行修改,真的是坑。代码如下:

def youdao(content):
	data={
		'i':content,
		'from':'AUTO',
		'to':'AUTO',
		'smartresult':'dict',
		'client':'fanyideskweb',
		'salt':'1533907163550',
		'sign':'e8fb6c81be653475e67a42f06ee7c679',
		'doctype':'json',
		'version':'2.1',
		'keyfrom':'fanyi.web',
		'action':'FY_BY_CLICKBUTTION',
		'typoResult':'false'
	}
	response=requests.post(url_youdao,data=data,headers=ydheaders)
	result=response.json()
	length=len(result['translateResult'][0])
	fanyi_result=''
	for i in range(length):
		fanyi_result=fanyi_result+result['translateResult'][0][i]['tgt']
	print('\n有道翻译:',fanyi_result+'\n')

其实我后面发现data数据可以不必全部提交也行

3 爬取百度翻译

吐槽一下百度翻译就是个纸老虎,因为在爬取百度翻译的时候我才发现data里的sign一直在不断变化,每次提交的信息不一样数据也在变,我百度的时候说这是百度翻译对此加密了,需要在js文件里找到加密代码进行编译输出正确的提交,我也照做了,最后发现还是不行,后面我想到了有道的反爬就心血来潮一试,结果没想到他居然也是把request url改了,跟它的sign没有半毛钱关系。简直无语,代码如下(只放了英译中的):

def baidu(content):
#    sign=findsign(content)
#    data={'from':'en','to':'zh','query':content,'transtype':'translang','simple_means_flag':'3','sign':sign,'token':'d3e57e8f690ef485d54ee9dd68e0da30'}
    data={'from':'en','to':'zh','query':content}
    response=requests.post(url_baidu,data=data,headers=bdheaders)
    baidu_result=response.json()
    print('百度翻译:',baidu_result['data'][0]['dst']+'\n')

加#注释部分是我一开始的输入,后面慢慢探索发现就只要输入三个就行。

4 爬取谷歌翻译

不得不说还是谷歌的反爬做的最好,它也引入了一个tk码,而且还和前面的request url结合起来了,所以不得不破解这个算法,但网上已经有大神破译了这种算法我就直接拿来写了一个库,在代码的开头import就行了,代码如下:

def google(content): 
	tk = js.getTk(content)     
	param = {'tk': tk, 'q': content}
	result = requests.get("""http://translate.google.cn/translate_a/single?client=t&sl=en
		&tl=zh-CN&hl=zh-CN&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss
		&dt=t&ie=UTF-8&oe=UTF-8&source=btn&ssel=3&tsel=6&kc=0""", params=param,headers=ggheaders)
	fanyi_ans=result.json()
	length=len(fanyi_ans[0])
	fanyi_answer=''
	for i in range(length-1):
		fanyi_answer=fanyi_answer+fanyi_ans[0][i][0]
        print('谷歌翻译:',fanyi_answer+'\n')

最后我用py2exe库生成了exe文件,让其在普通的没有安装python的Windows下也能执行,运行效果如下(由于中译英用的少便没有爬取欧路词典了):

运行图

这是我自己利用爬虫做的第一个对我来说有用的东西,个人感觉实用性还不错,当然还有许多需要加强的地方,以后再慢慢改进。

相关代码:https://github.com/miraclewk/Fanyi

exe程序下载:链接: https://pan.baidu.com/s/1CbQDU_8QBQrtbl_23Tek6w 密码: 8hsk

2 Replies to “爬虫那些事(二)

  1. 自己这两天一直在用,感觉还不错,而且越用越好用,嘻嘻,总算是学以致用了,开心(*^▽^*)

    1. 还发现了一个新优点,就是你复制一大段英文到谷歌翻译或其他翻译时,需要将其整合成连续的一行,谷歌翻译出来的结果才是连续的,而我这个不需要,只是多需要按一个e结束输入,另外我这个还可以对前面的翻译结果有个记录,可以随时往前翻看所有的结果,哈哈

发表评论

邮箱地址不会被公开。 必填项已用*标注