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

问题描述:
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 sign


def get_timeStamp():
    t = time.time() * 1000
    return 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} 分析(三)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值