【Python项目实战】爬虫核心技术-有道翻译js逆向解析,不再做一个基础的爬虫代码书写者!

爬取目标

网址:有道翻译

image.png

工具使用

开发工具:pycharm

开发环境:python3.7, Windows10

使用工具包:requests,random,hashlib

重点学习内容

  • 网络请求的发送

  • js代码调试

  • js代码解析逆向

 

项目思路解析

先区分数据的加载方式 请求数据时网址是没有变化的 通过抓包获取到动态数据

找到对应的数据接口 获取到网页的请求接口 请求方法是post请求

image.png

post需要提交的数据

image.png

可以明显看出salt是时间戳 多个请求的数据进行比较 只有sign值是在不断变化的加密数据 找到数据的加密规则 找到加密文件

image.png

打上断点找到对应加密数据的位置 调试代码进入断点

image.png

 

sign值是由r.sign得来的 找到r的生成方式

image.png

找到最终的加密数据的位置

image.png

ts为时间戳 salt为时间戳加一个随机数 sign为MD5的加密方法生成的数据 sign是由时间戳的改变而改变的

明确加密的方式剩下的就是书写代码了

简易源码分析

import requests
import time
import random
import hashlib



def main():
    """主程序"""
    url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
    headers = {
        'X-Requested-With': 'XMLHttpRequest',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
        'Origin': 'http://fanyi.youdao.com',
        'Referer': 'http://fanyi.youdao.com/',
        'Cookie': 'OUTFOX_SEARCH_USER_ID=-1808168645@10.108.160.208; JSESSIONID=aaaRyVJv8oEwg7dPaWrux; OUTFOX_SEARCH_USER_ID_NCOO=704285648.1294403; ___rl__test__cookies=1602406917270'
    }
    i = input("请输入你要的数据:")
    """获取参数"""
    lts = str(int(time.time()*100))
    salt = lts + str(random.randint(0, 9))

    content = "fanyideskweb" + i + salt + "]BjuETDhU)zqSxf-=B#7m"
    sign = hashlib.md5(content.encode("utf-8")).hexdigest()
    data = {
        'action': 'FY_BY_CLICKBUTTION',
        'bv': '9caf244986fe6d1de38207408302e500',
        'client': 'fanyideskweb',
        'doctype': 'json',
        'from': 'AUTO',
        'i': i,
        'keyfrom': 'fanyi.web',
        'lts': lts,
        'salt': salt,
        'sign': sign,
        'smartresult': 'dict',
        'to': 'AUTO',
        'version': '2.1'
    }
    response = requests.post(url=url,headers=headers,data=data)
    print(response.json()["translateResult"][0][0]["tgt"])



if __name__ == '__main__':
    main()

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值