当前位置: 代码迷 >> 综合 >> Python3.7 有道翻译爬取 {“errorCode“: 50} 分析(一)
  详细解决方案

Python3.7 有道翻译爬取 {“errorCode“: 50} 分析(一)

热度:31   发布时间:2023-12-12 22:24:28.0

问题描述:
2021年7月11日20:56:43, 想学习一下如何 post 有道翻译

# -*- coding=utf-8 -*-
import json
import urllib.request
from urllib import parse
import hashlib
import time
import random# 任务,模拟人工, 进行有道的翻译base_Url = "https://fanyi.youdao.com"
# post_Url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"   # 这个是网页的 POST 网址,爬取没有效果
post_Url = "https://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"# sign 是 md5 加密内容
def get_md5(val):m = hashlib.md5()m.update(val.encode("UTF-8"))sign = m.hexdigest()return signdef get_timeStamp():t = time.time() * 1000return int(t)def get_salt(timestamp):fourteen_number = str(timestamp) + str(random.randint(0, 10))return fourteen_number# user_Input = input("请输入要翻译的内容: ")
user_Input = "这是真男人"
time_stamp = get_timeStamp()
md5_str = "fanyideskweb" + user_Input + get_salt(time_stamp) + "Y2FYu%TNSbMCxc3t2u^XT"
agent_cookie = "OUTFOX_SEARCH_USER_ID=820706643@10.169.0.83; JSESSIONID=aaaWKBrgmUrS-8Q8iLbQx; OUTFOX_SEARCH_USER_ID_NCOO=1761191122.0634499; ___rl__test__cookies=" + str(time_stamp) print("MD5 的拼接字符串 " + md5_str) print("MD5加密后的结果 " + get_md5(md5_str)) print("时间戳加一位: " + get_salt(time_stamp)) print("时间戳 " + str(time_stamp)) # 返回的时间戳是 int 类型 print("传入的agent_cookie: " + agent_cookie) my_User_Agent = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36","Accept": "application/json,text/javascript,*/*;q=0.01","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","X-Requested-With": "XMLHttpRequest","Cookie": agent_cookie
}post_data = {
    "i": user_Input,"from": "zh-CHS","to": "en","smartresult": "dict","client": "fanyideskweb","salt": get_salt(time_stamp),  # 13 位的时间戳 + 0 - 10 的随机数"sign": get_md5(md5_str),  # sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2ut^XT") # md5 加密 前中后"lts": time_stamp,"bv": "42be87a1ed7e55bfce1896cea0343d6b","doctype": "json","version": "2.1","keyfrom": "fanyi.web","action": "FY_BY_CLICKBUTTION"
}# js (new Date).getTime() # 输出的形式如: 162 590 743 1970   python 输出的形式是 : 1625907495.2802935 , 所以 * 1000 (1625907537356)
# print(parseInt(10 * Math.random(), 10)) # 用 10 进制进行转换data = urllib.parse.urlencode(post_data).encode("utf-8")
req = urllib.request.Request(post_Url, data=data, method='POST')
resp = urllib.request.urlopen(req).read().decode("utf-8")
print(resp)# 1: 用户输入中文, 翻译成英文# 2: 把输入的内容进行 URL 编码, 进行发送# 3: 返回的内容进行解码,并展示

运行结果: (中文和英文都不会乱码)
在这里插入图片描述

1: 不记得从哪里看来的文章,下面的 URL 把 _o 去掉,就可以
在这里插入图片描述

2: 如果用注释这段的 urlopen 打开 request
在这里插入图片描述
运行结果会乱码
在这里插入图片描述

问题解决: 把请求的 url 网址中的 _o 删除,还是有点用的。具体解决方法看 Python3.7 有道翻译爬取 {“errorCode“: 50} 分析(三)

  相关解决方案