手把手操作JS逆向爬虫入门(一)

本文爬取的网站如下(可以找解密工具解码)

aHR0cHM6Ly9uZXdyYW5rLmNuLw==

爬取的内容为网站的资讯情报版块的新闻资讯

鼠标点击翻页,在开发者工具中查看请求包,很容看出请求地址和参数,

其中post请求的参数如图:

 其中变化的参数为nonce和xyz,我们的目标就是找出这两个参数的加密原理,就是加密函数。然后用python代码编写函数生成该加密参数,或者抠出JS代码,然后在python中调用生成加密参数,然后传入post请求,实现爬虫。

逆向过程:
1、搜索参数nonce,会有如下结果:

 2、选择任一结果,选择美化代码,找到JS代码中该参数位置。

 3、此时很容易看到两个参数的位置,打上断点。注意,nonce参数就是i,而上一行显示i就是j函数

4、在658行处也打上断点,点击调试。显示j函数的链接,点击进去,就找到了j函数的代买,也就是nonce参数的生成原理。

只要有一定java或者js或者C语言经验, 不难看出,这段代码就是随机生成一个由9个数字或字母组成的字符串。

此时我们可以在自己的编译器中(我用Vscode,记事本也可以)新建一个JS文件(如newrank.js),然后直接拷入上段JS代码,这样解决了第一个参数。(也可以自己用python直接写一个随机函数生成)

 5、继续调试,寻找第二个参数xyz的加密原理。
xyz就是d函数,通过调试得知,d函数就是b函数,如下图。

 我们点击进入b函数,结果如下  

 其实这个函数的作用就是把参数进行md5加密,仅此而已!!! 如果看不懂,也可以直接把JS代码抠出来,毕竟就是一个函数。抠的时候,千万要抠全了, 否则是无效的函数。亲手测试下就知道这个大坑了,尤其是新手。我们把这个函数的JS代码复制出来,加到上面新建的 JS文件里面,然后保存。

6、还要找到生成参数xyz的加密函数的参数。重复刚才的调试,可以看到,生成xyz的d函数的参数为h,而上一行显示参数h由'/xdnphb/index/getMedia?AppKey=joker&keyword=&pageNumber=页码&pageSize=10' 和字符串'&nonce='和nonce参数拼接而成。

至此,我们找到了参数生成函数,以及其参数的来源。
接下来我们只需要调用我们新建的js文件里的相应函数,生成加密参数,然后传入post请求,即可完成爬虫。

要注意调用js代码的方法,具体请见完整爬虫代码。

import requests
import pprint,time
import execjs
import hashlib

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64;` rv:47.0) Gecko/20100101 Firefox/47.0",
    "referer": "https://www.newrank.cn/public/news.html?",
  }

with open(r'D:\pythoncode\JS\newrank.js',encoding='utf-8') as f: 
        #上面这个newrank.js文件就是我们新建的js文件,里面放入了从网站JS源码抠出的两个函数。
        js=f.read()
        ctx=execjs.compile(js) 
for page in range(1,21):    
        nonce=ctx.call('j') #调用JS代码中的函数生成第一个加密参数nonce
        xyz=f'/xdnphb/index/getMedia?AppKey=joker&keyword=&pageNumber={page}&pageSize=10&nonce=' + nonce
        xyz=ctx.call('b',xyz) #调用JS代码中的函数生成第二个加密参数xyz
        #xyz参数也可以直接用python的MD5加密实现
        # xyz=hashlib.md5(xyz.encode(encoding='utf-8')).hexdigest()        
        data = {
        'keyword': '',
        'pageNumber': str(page),
        'pageSize': '10',
        'nonce': nonce,
        'xyz': xyz
        }
        # print(nonce, xyz)
        response = requests.post('https://www.newrank.cn/xdnphb/index/getMedia', headers=headers, data=data)
        print(response.status_code)
        # print(response.text)
        response_data=response.json()['value']
        # pprint.pprint(response_data)
        for item in response_data:
                print('资讯标题:',item['title'],'发布时间:',item['public_time'])

看到如下的爬取结果如下,心里还是挺爽的。欢迎大家留言交流 !需要那个JS代码的也可以留言。

  • 26
    点赞
  • 152
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
了解Python爬虫后,您可能会对JavaScript逆向感兴趣。JavaScript逆向是指通过分析和理解JavaScript代码的执行过程,以及与服务器的交互方式,来模拟和反向工程JavaScript应用程序的过程。 以下是一些步骤和资源,帮助您入门JavaScript逆向: 1. 掌握基本的JavaScript知识:了解JavaScript语法、变量、函数、对象等基本概念是理解和逆向JavaScript应用程序的基础。 2. 使用开发者工具:现代浏览器提供了开发者工具,可以帮助您分析和调试JavaScript代码。通过使用开发者工具的控制台、网络面板和调试器,您可以查看和修改JavaScript代码的执行过程。 3. 学习网络请求和响应:理解JavaScript应用程序与服务器之间的通信方式非常重要。您可以学习HTTP协议、AJAX请求、XHR对象等相关知识,以便分析和模拟应用程序的网络请求。 4. 反混淆和解码JavaScript代码:有时,JavaScript代码经过混淆和压缩,使其难以阅读和理解。学习如何反混淆和解码JavaScript代码可以帮助您更好地分析和逆向应用程序。 5. 使用逆向工具和库:有一些专门用于JavaScript逆向的工具和库,如Puppeteer、Selenium、PhantomJS等。这些工具可以模拟浏览器行为,帮助您自动化操作逆向JavaScript应用程序。 请注意,JavaScript逆向需要一定的编程和网络知识,以及对JavaScript应用程序的理解。入门后,您可以通过实践项目和阅读更多相关资源来不断提升自己的技能。 希望这些信息对您有所帮助!如果您有更具体的问题,随时告诉我。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值