python3实用小工具--语言翻译器(附源码)


由于需求,要做一个翻译软件,主要是将外语翻译为汉语,特写一篇博客,记录下我的思路和代码。

一.准备工作

1.工具

(1)chrome 谷歌浏览器 下载地址:https://www.google.cn/chrome/,Xpath Helper 用于快速编写xpath语法,下载地址:https://wws.lanzous.com/iB3Rtiqxdbg

(2)python3.7 下载地址:https://www.python.org/downloads/release/python-374/,开发工具:PyCharm 下载地址:http://www.jetbrains.com/

二.思路

1.整体思路
在这里插入图片描述

2.Python代码思路
在这里插入图片描述

三.获取数据

(1)打开主站

本次要分析的网页为:

https://fanyi.900cha.com/

在这里插入图片描述
可以看到,用户通过在输入框输入要翻译的内容,然后选择源语言和目标语言,最终可以实现将源语言转化为目标语言,即语言翻译。

(2)分析网页

接下来分析数据加载方式,分析以下他是如何实现语言的转化。将我们准备好的文本(蒙古语),输入到框框中,点击在线翻译。

在这里插入图片描述
发现页面类似于刷新即url没有改变,但是在上方出现了翻译结果,经验告诉我,他是通过post用户输入文本到网站最后返回数据。

(3)分析数据加载方式

F12或者右击检查,打开开发者工具,切换到network选项卡并且刷新网页,重新获取数据,搜索翻译结果。在这里插入图片描述
遂点击Headers查看网页url和相关信息,查看请求url和请求方法。在这里插入图片描述
和猜想一样,确实是Post请求,这时接着往下查看Form Data。在这里插入图片描述
已经很明显了,当用户输入翻译内容并且选定翻译语言后,网站通过post方法将这些data提交到了请求的url中,返回了翻译结果。

四.撰写爬虫

#coding=utf-8
'''
本脚本实现将非汉语文字转化为汉语
'''
import requests
from lxml import etree
import urllib3

#发送请求,获取响应后的html文本
def get_html():
    url='https://fanyi.900cha.com/'
    headers={
    
    
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Host': 'fanyi.900cha.com',
    'Origin': 'https://fanyi.900cha.com',
    'Referer': 'https://fanyi.900cha.com/',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
    }
    form_data={
    
    
        'content':text,
        'source': 'auto',#源语言,设置auto为自动识别
        'target': "zh"#目标语言
    }
    try:# 禁用安全请求警告
        urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
        r=requests.post(url,headers=headers,data=form_data,verify=False)#verify=False移除SSL认证
        return r.text
    except:
        pass

#解析网页内容
def parse(html):
    res=etree.HTML(html)
    tr_result=res.xpath('//div[@class="card-body"]/p/text()')
    result=''.join((tr_result)).strip()#将结果进行字符串处理
    print(result)

def main():
    res = get_html()
    parse(res)


if __name__ == '__main__':
    text='''Сайн уу, найзуудаа, би Хунюань Синжи Тайжи сургуулийн эх орондоо ?йлчлэх мастер юм.  Яг одоо нэг найз маань надаас Ма багшид юу тохиолдсон юм гэж асуухад би юу болоод байгааг хэлээд надад хэдэн скриншот явуулсан юм.  Тийм ээ!  Энэ нь ?чигд?р болж таарлаа.Тэд гучин насны хоёр залуу байсан б?г??д нэг нь 90 гаруй кг жинтэй, н?г?? нь 80 гаруй кг жинтэй байсан.Тэд ?? ... нэг нь намайг биеийн тамирын зааланд хичээллэж байх ?ед миний умайн х?з??ний нуруу хугарсан гэсэн.Ма багш  Та надад эмх замбарааг?й юань тариалах аргыг зааж ?гч болох уу, богинохон ... Умайн х?з??ний нуруугаа эмчлэхэд туслаач.  Би тийм гэж хэлсэн.  Би чамайг биеийн тамирын зааланд шаргуу ажиллахг?й байна гэж хэлсэн, тэр ч бас итгэлг?й байна.  Би х??хэд гэж хэллээ: чи над дээр хоёр гар, нэг хуруугаараа ир, тэр олохг?й байна.  Тэр чамайг дэмий гэж хэлсэн.  Би ??рийг?? 
    '''
    main()

这里介绍一下Xpath Helper

xpath helper插件是一款免费的chrome爬虫网页解析工具。可以帮助用户解决在获取xpath路径时无法正常定位等问题。该插件主要能帮助你在各类网站上通过按shift键选择想要查看的页面元素来提取查询其代码,同时你还能对查询出来的代码进行编辑,而编辑出的结果将立即显示在旁边的结果框中。

在信息抽取的时候,用它很方便。
在这里插入图片描述

五.输出结果

程序运行是没有问题的。在这里插入图片描述
此翻译器的GUI版本以及GUI版本源代码我放在了蓝奏云:https://wws.lanzous.com/i2ysujzllcd

六.总结

  • 本次用python写了一个在线翻译的脚本,能够实现不同语言之间的转换。分析出网页数据请求方式,通过在python构造相应的请求,即可得到响应结果,此翻译工具日常翻译单词,句子没有问题,但是不能翻译长度超过5000的文本,还有待改进。思路、代码方面有什么不足欢迎各位大佬指正、批评!

附:语言表

'自动选择': 'auto'
'南非荷兰语': 'af'
'阿尔巴尼亚语': 'sq'
'阿姆哈拉语': 'am'
'阿拉伯语': 'ar'
'亚美尼亚语': 'hy'
'阿塞拜疆语': 'az'
'巴斯克语': 'eu'
'白俄罗斯语': 'be'
'孟加拉语': 'bn'
'波斯尼亚语': 'bs'
'保加利亚语': 'bg'
'加泰罗尼亚语': 'ca'
'宿务语': 'ceb'
'中文(简体)': 'zh'
'中文(繁体)': 'zh-TW'
'科西嘉语': 'co'
'克罗地亚语': 'hr'
'捷克语': 'cs'
'丹麦语': 'da'
'荷兰语': 'nl'
'英语': 'en'
'世界语': 'eo'
'爱沙尼亚语': 'et'
'芬兰语': 'fi'
'法语': 'fr'
'弗里西语': 'fy'
'加利西亚语': 'gl'
'格鲁吉亚语': 'ka'
'德语': 'de'
'希腊语': 'el'
'古吉拉特语': 'gu'
'海地克里奥尔语': 'ht'
'豪萨语': 'ha'
'夏威夷语': 'haw'
'希伯来语': 'he'
'印地语': 'hi'
'苗语': 'hmn'
'匈牙利语': 'hu'
'冰岛语': 'is'
'伊博语': 'ig'
'印尼语': 'id'
'爱尔兰语': 'ga'
'意大利语': 'it'
'日语': 'ja'
'爪哇语': 'jw'
'卡纳达语': 'kn'
'哈萨克语': 'kk'
'高棉语': 'km'
'韩语': 'ko'
'库尔德语': 'ku'
'吉尔吉斯语': 'ky'
'老挝语': 'lo'
'拉丁语': 'la'
'拉脱维亚语': 'lv'
'立陶宛语': 'lt'
'卢森堡语': 'lb'
'马其顿语': 'mk'
'马尔加什语': 'mg'
'马来语': 'ms'
'马拉雅拉姆语': 'ml'
'马耳他语': 'mt'
'毛利语': 'mi'
'马拉地语': 'mr'
'蒙古语': 'mn'
'缅甸语': 'my'
'尼泊尔语': 'ne'
'挪威语': 'no'
'尼杨扎语(齐切瓦语)': 'ny'
'普什图语': 'ps'
'波斯语': 'fa'
'波兰语': 'pl'
'葡萄牙语': 'pt'
'旁遮普语': 'pa'
'罗马尼亚语': 'ro'
'俄语': 'ru'
'萨摩亚语': 'sm'
'苏格兰盖尔语': 'gd'
'塞尔维亚语': 'sr'
'塞索托语': 'st'
'修纳语': 'sn'
'信德语': 'sd'
'僧伽罗语': 'si'
'斯洛伐克语': 'sk'
'斯洛文尼亚语': 'sl'
'索马里语': 'so'
'西班牙语': 'es'
'巽他语': 'su'
'斯瓦希里语': 'sw'
'瑞典语': 'sv'
'塔加洛语(菲律宾语)': 'tl'
'塔吉克语': 'tg'
'泰米尔语': 'ta'
'泰卢固语': 'te'
'泰语': 'th'
'土耳其语': 'tr'
'乌克兰语': 'uk'
'乌尔都语': 'ur'
'乌兹别克语': 'uz'
'越南语': 'vi'
'威尔士语': 'cy'
'班图语': 'xh'
'意第绪语': 'yi'
'约鲁巴语': 'yo'
'祖鲁语': 'zu'
'南非荷兰语': 'af'
'阿尔巴尼亚语': 'sq'
'阿姆哈拉语': 'am'
'阿拉伯语': 'ar'
'亚美尼亚语': 'hy'
'阿塞拜疆语': 'az'
'巴斯克语': 'eu'
'白俄罗斯语': 'be'
'孟加拉语': 'bn'
'波斯尼亚语': 'bs'
'保加利亚语': 'bg'
'加泰罗尼亚语': 'ca'
'宿务语': 'ceb'
'中文(简体)': 'zh'
'中文(繁体)': 'zh-TW'
'科西嘉语': 'co'
'克罗地亚语': 'hr'
'捷克语': 'cs'
'丹麦语': 'da'
'荷兰语': 'nl'
'英语': 'en'
'世界语': 'eo'
'爱沙尼亚语': 'et'
'芬兰语': 'fi'
'法语': 'fr'
'弗里西语': 'fy'
'加利西亚语': 'gl'
'格鲁吉亚语': 'ka'
'德语': 'de'
'希腊语': 'el'
'古吉拉特语': 'gu'
'海地克里奥尔语': 'ht'
'豪萨语': 'ha'
'夏威夷语': 'haw'
'希伯来语': 'he'
'印地语': 'hi'
'苗语': 'hmn'
'匈牙利语': 'hu'
'冰岛语': 'is'
'伊博语': 'ig'
'印尼语': 'id'
'爱尔兰语': 'ga'
'意大利语': 'it'
'日语': 'ja'
'爪哇语': 'jw'
'卡纳达语': 'kn'
'哈萨克语': 'kk'
'高棉语': 'km'
'韩语': 'ko'
'库尔德语': 'ku'
'吉尔吉斯语': 'ky'
'老挝语': 'lo'
'拉丁语': 'la'
'拉脱维亚语': 'lv'
'立陶宛语': 'lt'
'卢森堡语': 'lb'
'马其顿语': 'mk'
'马尔加什语': 'mg'
'马来语': 'ms'
'马拉雅拉姆语': 'ml'
'马耳他语': 'mt'
'毛利语': 'mi'
'马拉地语': 'mr'
'蒙古语': 'mn'
'缅甸语': 'my'
'尼泊尔语': 'ne'
'挪威语': 'no'
'尼杨扎语(齐切瓦语)': 'ny'
'普什图语': 'ps'
'波斯语': 'fa'
'波兰语': 'pl'
'葡萄牙语': 'pt'
'旁遮普语': 'pa'
'罗马尼亚语': 'ro'
'俄语': 'ru'
'萨摩亚语': 'sm'
'苏格兰盖尔语': 'gd'
'塞尔维亚语': 'sr'
'塞索托语': 'st'
'修纳语': 'sn'
'信德语': 'sd'
'僧伽罗语': 'si'
'斯洛伐克语': 'sk'
'斯洛文尼亚语': 'sl'
'索马里语': 'so'
'西班牙语': 'es'
'巽他语': 'su'
'斯瓦希里语': 'sw'
'瑞典语': 'sv'
'塔加洛语(菲律宾语)': 'tl'
'塔吉克语': 'tg'
'泰米尔语': 'ta'
'泰卢固语': 'te'
'泰语': 'th'
'土耳其语': 'tr'
'乌克兰语': 'uk'
'乌尔都语': 'ur'
'乌兹别克语': 'uz'
'越南语': 'vi'
'威尔士语': 'cy'
'班图语': 'xh'
'意第绪语': 'yi'
'约鲁巴语': 'yo'
'祖鲁语': 'zu'

猜你喜欢

转载自blog.csdn.net/a1397852386/article/details/110521060