python爬虫js逆向学习(一)

    技术2022-07-10  130

    1.分析网站

    以下以有道翻译网站为例介绍爬取时存在的问题

    1.1 先进入网站进行访问,使用开发者工具抓包找出服务器返回的数据包的api 1.2 而后查看请求头,观察交互过程,请求方式为post,且部分Form Data进行了加密,i为需要翻译的输入内容,其他均不变 在这里插入图片描述 1.3 接下来用全局搜索寻找数据包的来源及formdata的出处,并找出可变参数的实现过程 1.4 在js代码中找出参数生成的过程,也可在浏览器控制台中调试生成代码

    2.python代码实现

    2.1 可变参数生成

    import random import time from hashlib import md5 # ts: # 时间戳:格林尼治时间(1970.1.1.00.00.00)到当下的总秒数 r=str(time.time()*1000) # salt: i=r+str(random.randint(0,10)) # sign: sign=md5(("fanyideskweb" + word + salt + "Nw(nmmbP%A-r6U3EUn]Aj").encode()).hexdigest()

    2.2 全部代码

    import requests import time from hashlib import md5 import random def main (): url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" headers={ 'Cookie': '', 'Host': 'fanyi.youdao.com', 'Origin': 'http: // fanyi.youdao.com', 'Referer': 'http: // fanyi.youdao.com /', 'User-Agent': ''} word=input("请输入需要翻译的文字:") timetemp=time.time()*1000 salt=str(timetemp)+str(random.randint(0,10)) temp="fanyideskweb" + word + salt + "Nw(nmmbP%A-r6U3EUn]Aj" sign=md5(temp.encode('utf-8')).hexdigest() data={ 'i':word, 'from':'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': salt, 'sign': sign, 'ts': timetemp, 'bv': 'e3024dc52ff5c694b77471a08006ba92', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME' } res=requests.post(url=url,headers=headers,data=data) print(res.json()['translateResult'][0][0]['tgt']) if __name__=='__main__': main()
    3.思路总结

    3.1 首先找出获取数据的接口,查看浏览器与服务器的交互过程,试验得出formdata的规律; 3.2 根据接口名称进行全局搜索,取出异步执行的js代码,从中找出foredata的生成函数; 3.3 用python代码替换js代码生成参数。

    js进一步学习见python爬虫js逆向学习(二)python爬虫js逆向学习(三)

    Processed: 0.011, SQL: 9