【实战解析】德天和你学爬虫在你的电脑上对接有道翻译

实战解析

有道翻译爬虫

核心分析:

hashlib库:

  1. md5算法中,生成一个32位的16进制字符串,128位字节

  2. m.update(b) 用提供的字节串更新此哈希对象m(hash object)的状态。

  3. m.hexdigest() 返回摘要,作为十六进制数据字符串值,要点:16进制,字符串

  4. encode()编码为计算机识别,decode()解码为人识别

  5. bytes()字节串,便于网络传输,可以存入字符,数字,图形,音频等内容。

    字符转字节方法1:

    s='abcde'
    b = bytes(s,encoding='utf-8')
    print(b)
    

    1)bybytes内参数只能为字节形式,可以添加编码参数encoding=‘utf-8’

    1. 为字符串添加encode()方法
    s='abcde'
    b = s.encode(encoding='utf-8')
    print(b)
    
  6. nmd5(headerstr) 对headerstr进行加密

  7. 时间模块代码:返回字符串数字

    import time
    ts=str(round(time.time()*1000))
    print(ts)
    
    
  8. #这段代码是把输入的查询内容transtr和dict数据salt的值及传送的其他信息映射给strexample通过nmd5加密
    strexample='fanyideskweb'+transtr+salt+'n%A-rKaT5fb[Gy?;N5@Tj'
    
  9. sign=nmd5(strexample) 对dict中的sign值进行加密

  10. 函数nmd5(str)说明:加密作用

    (1)得到加密对象m
    (2)对传入参数str进行字节编码
    (3) 输入的字符串对对象进行刷新
    (4)刷新后的16进制返回值传递给参数str_md5,函数结束返回str_md5

  11. 函数formdata(transtr)说明:数据格式函数最终封装了一个dict字典值

    (1) 截取User-Agent值,并传递给变量headerstr
    (2) 调用函数nmd5并转入变量headerstr进行加密
    (3) 取到系统时间字符串返回结果,变量为ts(时间字符串)
    (4) 字符串ts和90合并,传递给变量salt(下面字典dict的salt值)
    (5) strexample=‘fanyideskweb’+transtr+salt+‘n%A-rKaT5fb[Gy?;N5@Tj’ 估计这是一段响应代码包含了transtr和salt
    (6) 把上面响应代码进行加密并传递给sign(下面字典dict的sign值)
    (7) 通过len函数获取transtr要格式化数据的长度,这是字典dict,i的值
    (8) 获取全部的字典数据,然后函数结束,并返回字典dict

  12. 下面代码部分开始设定目录url,发送请求urlencode()

  13. 输入内容转化为字典

  14. dict=urllib.parse.urlencode(dict) 通过 urlencode函数 对参数进行处理,形成标准的参数

  15. 形成的标准参数转化为字符串dict=str(dict),然后封装进post参数data中并向服务器发送请求

  16. 获取到json()数据,并输出第0项的结果

源码设计

import requests
import hashlib
import time
import urllib.parse
# 创建md5对象
def nmd5(str):
    m = hashlib.md5()
    # Tips
    # 此处必须encode
    # 若写法为m.update(str)  报错为: Unicode-objects must be encoded before hashing
    # 因为python3里默认的str是unicode
    # 或者 b = bytes(str, encoding='utf-8'),作用相同,都是encode为bytes
    b = str.encode(encoding='utf-8')
    m.update(b)
    str_md5 = m.hexdigest()
    return  str_md5
def formdata(transtr):
    # 待加密信息
    headerstr = '5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    #print(round(time.time()*1000))
    bv=nmd5(headerstr)
    ts=str(round(time.time()*1000))
    salt=ts+'90'
    strexample='fanyideskweb'+transtr+salt+'n%A-rKaT5fb[Gy?;N5@Tj'
    sign=nmd5(strexample)
    #print(sign)
    i=len(transtr)
    #print(i)
    # print('MD5加密前为 :' + headerstr)
    # print('MD5加密后为 :' + bv)
    dict={'i':transtr,'from':'AUTO','TO':'AUTO','smartresult': 'dict',
          'client':'fanyideskweb',
          'salt':salt,
          'sign':sign,
          'ts':ts,
          'bv':bv,
          'doctype':'json',
          'version':'2.1',
          'keyfrom':'fanyi.web',
          'action':'FY_BY_REALTlME'
    }
    return dict


url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
 'Referer':'http://fanyi.youdao.com/',
 'Origin': 'http://fanyi.youdao.com',
 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
 'X-Requested-With':'XMLHttpRequest',
 'Accept':'application/json, text/javascript, */*; q=0.01',
 'Accept-Encoding':'gzip, deflate',
 'Accept-Language':'zh-CN,zh;q=0.9',
 'Connection': 'keep-alive',
 'Host': 'fanyi.youdao.com',
 'cookie':'_ntes_nnid=937f1c788f1e087cf91d616319dc536a,1564395185984; OUTFOX_SEARCH_USER_ID_NCOO=; OUTFOX_SEARCH_USER_ID=-10218418@11.136.67.24; JSESSIONID=; ___rl__test__cookies=1'
 }
input=input("请输入翻译内容:")
dict=formdata(input)
dict=urllib.parse.urlencode(dict)
dict=str(dict)
#dict=urllib.parse.urlencode(dict).encode('utf-8')

req=requests.post(url,data=dict,headers=header)
val=req.json()
print(val['translateResult'][0][0]['tgt'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值