使用python实现在线翻译::从原理到实践_数据

零.目录

1.引子

2.原理

3.实践

3.1.需求

3.2.实现思路

3.3.实现步骤

4.运行结果展示

一.引子

在当今全球化的时代,跨语言交流日益普遍,而在线翻译服务成为了解决语言障碍的重要工具。本文将深入介绍如何利用Python爬虫技术,结合各种在线翻译平台,实现自动化的文本翻译。我们将探索实现原理、应用场景,并提供实用示例,助力读者掌握这一强大而实用的技能。

二.原理

Python爬虫的基本原理如下:首先,爬虫通过网络请求获取网页源代码;其次,解析源代码,提取所需信息,通常使用正则表达式或解析库如BeautifulSoup;然后,将提取的数据进行处理,可能是存储到数据库或文件中;最后,持续不断地循环执行这一过程,以实现自动化地抓取数据。这一原理简明扼要,却蕴含了深刻的网络技术和编程理念,让人不禁想要深入探索其中的奥秘。

三.实践

(1).需求

以requests库、BeautifulSoup库、jieba库为主要工具,当用户输入单词,便会从搜狗在线翻译获取翻译,弹出单词音标和释义。

使用python实现在线翻译::从原理到实践_爬虫_02

(2).实现思路

1.用户输入

2.查找对应网页

3.读取释义并反馈给用户

4.下轮输入

(3).实现步骤

1.骨架

我们首先导入必要的库,再创建一个主函数,它目前只包含了一个

import time

import requests
from bs4 import BeautifulSoup


def main(count, fix, headers):
    print('\n')
    thing = input('请输入:')
    
    
if __name__ == '__main__':
    while True:
        main(count=0, fix='',
             headers={'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'})

2.爬取URL

经过观察,搜狗翻译将每一个单词归到一个单独的页面,这让我们爬取的难度降低了许多。URL规律如下所示:

使用python实现在线翻译::从原理到实践_Python_03

发现单词处在'keyword'中,且每一行都表示为一个'%0A',那么我们便'对症下药',开始编写。在main函数中添加如下代码:

try:
        response = requests.get(
            f'https://fanyi.sogou.com/text?keyword={thing}%0A&transfrom=auto&transto=zh-CHS&model=general',
            headers=headers, timeout=10)
        time.sleep(1)
    except ConnectionError as c:
        print(f'\t连接错误! {c}')
    except FileNotFoundError as f:
        print(f'\t错误! {f}')
    except TimeoutError as T:
        print(f'\t响应超时! {T}')
    else:
        pass

3.抓取翻译与反馈

使用BeautifulSoup获取翻译。由于网页做了混淆,缩进也很乱,所以我们直接复制源代码到pycharm进行格式化:

格式化前:

使用python实现在线翻译::从原理到实践_数据_04

格式化后:

使用python实现在线翻译::从原理到实践_字符串_05

可以看到,单词的释义都处于属性class的div标签下,因此可以传入这个属性进行方法选择。经过一些输出的格式化后,代码如下,注意是添加在刚刚的else代码块下:

soup = BeautifulSoup(response.text, 'lxml')
        mean = soup.find_all('div', class_='item-wrap')
        for c in mean:
            fix += c.get_text()
        for p in fix:
            if p == '英':
                print('\n音标:', end='')
            elif p == ']':
                count += 1
                if count == 2:
                    print(']')
                    print('释义:', end='')
                    continue
            print(p, end='')

没错,我们的fix形参就是用来拼接的字符串,但这么写实在冗长,希望各位大神能在评论区留一下你们的意见!

4.运行结果展示

结果如下,你也可以在cmd里运行:

使用python实现在线翻译::从原理到实践_爬虫_06