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

Python3.7 有道翻译爬取{“errorCode“: 50} ????问题 分析(二)

热度:92   发布时间:2023-12-12 22:24:17.0

问题描述, Python3.7 有道翻译爬取{“errorCode”: 50} 乱码问题 分析(一) 里面遇到一个 url 编码乱码问题,具体是什么原因导致的呢,怎么解决的呢?

# -*- 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"))return m.hexdigest()def get_timeStamp():t = time.time() * 1000return int(t)def get_salt(timestamp):return str(timestamp + random.randint(0, 10))# 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;"
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",'Referer': 'http://fanyi.youdao.com/',"Cookie": agent_cookie
}post_data = {
    "i": user_Input,# "from": "zh-CHS","from": "AUTO",# "to": "en","to": "AUTO","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 加密 前中后# "bv": "42be87a1ed7e55bfce1896cea0343d6b","doctype": "json","version": "2.1","keyfrom": "fanyi.web","action": "FY_BY_CLICKBUTTION",# 'typoResult': 'true'
}# 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, headers=my_User_Agent, method='POST')
# req = urllib.request.Request(post_Url, data=data, method='POST')
resp = urllib.request.urlopen(req).read().decode("utf-8")
print(resp)print(int(time.time() * 1000) + random.randint(0, 10))
# 1: 用户输入中文, 翻译成英文# 2: 把输入的内容进行 URL 编码, 进行发送# 3: 返回的内容进行解码,并展示

代码中, 45 行里面把箭头所指的代码注释或者删除了即可
在这里插入图片描述

就不会再出现中 ????问题了
在这里插入图片描述

  相关解决方案