1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 爬虫---实现英语翻译(有道翻译)

爬虫---实现英语翻译(有道翻译)

时间:2019-07-11 23:21:52

相关推荐

爬虫---实现英语翻译(有道翻译)

翻译效果图:

源代码:

import urllib.request #导入模块import urllib.parseimport jsondef translate(text):# 参数检验if not text: #无内容输入return 'None'# 请求网址url = "/translate"# 表单数据params = {'i':text,'doctype':'json', #数据类型,指定为 JSON'from':'AUTO','to':'AUTO'}data = urllib.parse.urlencode(params).encode('utf-8')# 请求头部headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}# 构造请求对象req = urllib.request.Request(url=url,data=data,headers=headers)# 发送请求,获得响应response = urllib.request.urlopen(req)# 解析数据content = json.loads(response.read().decode('utf-8'))if content['errorCode'] == 0: # 一切正常result_tup = (item['tgt'] for item in content['translateResult'][0])result = ''.join(result_tup)else: # 发生错误result = 'Error'# 返回结果return resultif __name__ == "__main__":while True :text = input('翻译内容:')result = translate(text)print("翻译结果:%s" % result)

讲解:

一、urllib 的 request 模块 和 parse 模块

1、 request 模块(请求处理模块)

① urlopen 方法(发送请求,获得响应)

urllib.request.urlopen(req)

req 参数在下一个方法会讲到的

函数整体的返回值

response = urllib.request.urlopen(req)

② Request 方法(构造请求对象)

urllib.request.Request((url=url,data=data,headers=headers)

url 参数(str):请求网址

url = /translate

data 参数(bytes):表单数据,默认为 None(后面会讲到)

data = urllib.parse.urlencode(params).encode('utf-8')

headers 参数(dict):请求头部(一定要用大括号)

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}

在 Network 中第一个文件的 Headers 的最下面显示

函数整体的返回值

req = urllib.request.Request((url=url,data=data,headers=headers)

2、 parse 模块(URL 处理模块)

就如上面的 data 参数用到的就是此模块的urlencode 方法

data = urllib.parse.urlencode(params).encode('utf-8')

作用是将 dict 类型数据转化为 str 类型数据(并将 str 类型数据转化成 bytes 类型数据)

二、JSON 对象

先说明一下,JSON 是一种轻量级的数据格式(或者说像XML一样是一种标准)

代码开头导入了 josn 库,目的是为了用它的loads 函数

json.loads(response.read().decode('utf-8'))

作用是将已编码的 JSON 字符串解码为 Python 对象

read():返回响应体(bytes 类型),通常需要使用decode('utf-8')将其转化为 str 类型

函数整体的返回值

content = json.loads(response.read().decode('utf-8'))

三、解析数据

if content['errorCode'] == 0: # 一切正常result_tup = (item['tgt'] for item in content['translateResult'][0])result = ''.join(result_tup)else: # 发生错误result = 'Error'

上面所述内容是基于有道翻译反爬虫机制而编写的

具体详解我也不是很清楚

四、关于 main 函数

if __name__ == '__main__'的意思是:当 .py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当 .py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行

但由于本源代码没有发挥出它的作用,所以写这个函数只是为了规范(好看

参考博客:

爬虫系列(三) urllib的基本使用

爬虫系列(四) 用urllib实现英语翻译

Python中if _ name _ == “_ main _” ,init 和self 的解析

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。