首页 > 编程语言 >Python3—爬虫实现有道在线翻译—(常见错误汇总及解决方法)

Python3—爬虫实现有道在线翻译—(常见错误汇总及解决方法)

时间:2023-01-31 13:34:53浏览次数:61  
标签:翻译 请求 有道 爬虫 com formdata Python3 在线翻译


Python 全栈工程师核心面试 300 问深入解析(2020 版)----全文预览
Python 全栈工程师核心面试 300 问深入解析(2020 版)----欢迎订阅

今天尝试了一个Python3的爬虫项目:

Python3实现有道在线翻译

代码实现过程中遇到一些问题,经过研究都找到了对应的解决方法,先将遇到的问题和解决方法汇总如下,供大家参考:

有道在线翻译是POST实现的,百度翻译也是。

有道翻译每次翻译的时候,最上方地址栏中的地址时固定不变的,可以猜测有道是通过post请求实现翻译功能的。

POST与GET的区别:

POST请求的参数都在放在formdata中,可以查看有道翻译,翻译一个单词,检查network中headers,里面有formdata,里面有发送请求的相关参数。浏览器地址栏中的网址没有发生变化。可以参考有道翻译:
​​​ http://fanyi.youdao.com/​

get请求:请求的参数直接放在url地址之中,请求的参数进行url编码直接放在地址中,可以参考豆瓣的电影排行榜:
​​​ https://movie.douban.com/typerank?type_name=剧情&type=11&interval_id=100:90&action=​

(注:判断post与get请求最显著的区别就是url地址是否发生变化,发生变化了就是get,反之则是post请求,post请求的参数是在表单里)

先放最终项目实现的源码:

# Python3实现有道在线翻译案例
# 有道在线翻译http://fanyi.youdao.com/

import json
from urllib import request, parse

if __name__ == '__main__':

key = input("请输入需要翻译的文字(输入完成后请按Enter): ")

# 打开有道在线翻译,输入girl,检查,找到headers,复制里面的网址
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'

# 将网页中的Form Data中的所有数据复制出来
# 通过调试发现,只需要其中的i对应要翻译的内容和doctype对应的数据格式
formdata = {
'i': key,
'doctype': 'json',
}

# formdata中的数据需要转换为bytes格式
data = parse.urlencode(formdata).encode()

# 将网页中的请求头Request Headers中的数据复制出来,只需要一个用户代理即可
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71',
}

# 请求网页
req = request.Request(url=url, data=data, headers=headers)

# 返回网页
res = request.urlopen(req)

# 下载导出数据
result = json.loads(res.read())

# 打印出翻译后的结果
print("\n翻译结果: " + result["translateResult"][0][0]["tgt"])

输出结果:

中译英

请输入需要翻译的文字(输入完成后请按Enter): 我爱你,亲爱的包包

翻译结果: I love you, my dear bag

英译中

请输入需要翻译的文字(输入完成后请按Enter): I LOVE YOU BABY

翻译结果: 我爱你宝贝

问题汇总

问题1:

出现以下错误:“errorcode”:50

解决方法:将原网址中的_o删除

- 原网址:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule

- 修改后网址:http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule

- _o的可能用途:有道翻译在线进行了加密过程,检查源码发现formdata中有salt(俗称加盐,一个附加的字符串,附加之后然后进行加密,类似于一般用户输入密码位数有限,服务器会给密码附加一串随机的数值,然后再进行加密,加密一般都是JS加密)和sign(加密后的字段)两个数据

- 如果要用带_o的网址,需要将这两个参数带上,但是只能翻译你网页刚刚翻译的那个单词,翻译其它的代码会一直处于等待状态。。。可能是加密引起的。

Python3—爬虫实现有道在线翻译—(常见错误汇总及解决方法)_有道翻译


**

问题2:

**
翻译没有结果显示,或者提示编码错误
解决方法:

  1. 请求头中只保留用户代理,还是不行更换用户代理
    用户代理地址参考:
  2. formdata中删除非关键参数,只保留以上代码中的键值


如果大家还遇到其它问题,欢迎回复补充


标签:翻译,请求,有道,爬虫,com,formdata,Python3,在线翻译
From: https://blog.51cto.com/u_14990501/6028991

相关文章

  • Pycharm中批量添加单引号,双引号的方法(爬虫Headers中批量加引号)
    ​​Python全栈工程师核心面试300问深入解析(2020版)----全文预览​​​​Python全栈工程师核心面试300问深入解析(2020版)----欢迎订阅​​爬虫项目时候,经常需要......
  • 爬虫学习1——request使用
    爬虫什么是爬虫:-通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。爬虫究竟是合法还是违法的?在法律中是不被禁止具有违法风险善意爬虫恶意爬虫......
  • Python3网络爬虫教程5——ProxyHandler处理(代理服务器和代理IP)
    上接:Python3网络爬虫教程4——UserAgent的使用(用户伪装)(附常用的UserAgent值清单[3.ProxyHandler处理(代理服务器)使用代理IP,是爬虫的常用手段服务器有反爬虫手段,使用代......
  • Python3.7采用CMD自动安装Pygame1.9.4
    ​​Python全栈工程师核心面试300问深入解析(2020版)----全文预览​​​​​​Python3.7采用CMD自动安装Pygame1.9.4,一步即可最近正在学习python开发游戏,需要安装Pygam......
  • Python 反爬虫——文本混淆反爬虫
    文中案例参考GitHub项目4文本混淆反爬虫4.1图片伪装为文字反爬虫有些文字内容实际是图片伪装的提取图片的内容(图片请求响应结果res.content就是图片的字节数据,可以直接......
  • Python 通用爬虫思路
    文章目录​​通用爬虫思路​​​​1.准备URL​​​​2.发送请求,获取响应​​​​3.提取数据​​​​4.保存​​通用爬虫思路1.准备URL准备start_urlurl地址规律不......
  • python3 获取国内上一个交易日 依赖chinese_calendar
    #获取国内上一个交易日defgetLastTradingday():#依赖库chinese_calendar,datetimedayStep=1lastTradingday=datetime.datetime.now()-datetime.......
  • 【Python】爬虫实战-基于代理池的高并发爬虫
    最近在写一个基于代理池的高并发爬虫,目标是用单机从某网站API爬取十亿级别的JSON数据。代理池有两种方式能够实现爬虫对代理池的充分利用:搭建一个TunnelProxy服务......
  • 爬虫
    https://www.bilibili.com/video/BV12E411A7ZQ?p=24&spm_id_from=pageDriver&vd_source=cc8c321a0c518e0bd44618323a320e131.将数据存入到excel文件中workbook=xlwt.W......
  • 【7】Python3函数
    Python函数函数是一个被命名的、独立的、完成特定功能的可重复使用的代码段,其可能给调用它的程序一个返回值。 被命名的:在Python中,大部分函数都是有名函数完成特定功......