网络爬虫(1)

您所在的位置:网站首页 js动态读取表格最新数据不显示内容 网络爬虫(1)

网络爬虫(1)

2023-09-08 09:16| 来源: 网络整理| 查看: 265

       

           本文以单个例子为基础,实现了最简单的python抓取动态脚本内容,仅做研究不用于任何非法目的。

       

目录

  第一步,打开网页右键审查元素

  第二步:获取请求参数 ,查看Headers

  第三步:构造请求参数

  第四步:HTTP请求实际模拟

       工具:360浏览器极速模式(极速模式下可使用审查元素功能), PYTHON, 

       目标:新榜各大平台排行榜公开数据(如下图所示)

      

       准备知识:

       1)360极速模式:  可使用审查元素功能。  审查元素最早是Google Chrome浏览器提供的一项服务功能,用户只需右键点击“审查元素”(名字),即可打开Chrome Inspector,获得网页各种元素的加载时间、                                               Javascript函数、Object等信息。

       2)NETWORK的XHR和JS区别:在‘Network’里过滤XHR标签,XHR是XMLHttpRequest,这是AJXAX的一个特征。AJAX (Asynchronous JavaScript and XML),直译的话就是异步的JavaScript和XML。这的                                                                      异步指的是异步加载或者异步数据交换,指的是利用XMLHttpRequst或其他fetch API在网页初步加载结束后,再次发送请求并从服务器上获取并解析数据,然后把这部分数据                                                                    添加到到已有的页面上,在这个过城中,访问的URL始终没变。AJAX本质上是一种框架,通过JavaScript可以实现部分更新网页的效果。对于界面,异步加载现象(就是往下                                                                    拖的时候会出现新的内容),这往往就是AJAX的显著标志,因此查询触发动作看XHR即可

                                                                  xhr 是 application/json,js 是 application/javascript。js代表直接请求的js文件,xhr代表的是ajax请求

       3)新榜:以日、周、月、年为周期,按24大分类权威发布以微信为代表的中国各自媒体平台真实、有价值的运营榜单

       4)nonce: Number once的缩写,在密码学中nonce是一个只被使用一次的任意或非重复的随机数值。在加密技术中的初始向量和加密散列函数都发挥着重要作用,在各类验证协议的通信应用中确保验证信息                             不被重复使用以对抗重放攻击(Replay Attack)。

                                           

    

  第一步,打开网页右键审查元素

    通过360极速模式下,点击如下图所示右边网页的每个栏目,可以看到TOP500排行。左边进行NETWORK抓包可以看到XHR(针对)

     

         第二步:获取请求参数 ,查看Headers

    

     可知请求参数为:www.newrank.cn/xdnphb/main/v1/day/rank      方式为POST提交  ,提交的参数内容如上图

     可以将这些参数放入在线的任意一个HTTP构造方式进行模拟测试,发现参数确实没有问题。

    

       

       第三步:构造请求参数

    (1)网址这个是固定的:www.newrank.cn/xdnphb/main/v1/day/rank 

    (2)end, rank_name, rank_name_group,stat也是可以手动选择的

    (3)nonce和xyz是需要定位前端代码进行了解其构造。

      通过搜索定位可以看到nonce的赋值: nounce是由j()函数生成的,而 xyz又是由nonce和其他字符串构造的

                          var i = j();

                         return g.nouce =i,   

                         h += "&nonce=" + i, 

                         g.xyz = d(h)

     

      先看看nonce对应的j()函数是如何声明的 ,可以看到j函数是一个随机数生成器,而且是一个长度为9的字符串。那么这个随机数基本可以任意长度为9的字符串进行PYTHO模拟请求。

       

       再看看xyz是如何生成的。可以动态调试参数,先打断点看看  h += "&nonce=" + i,这句h的值是什么,如下图,

       h = "/xdnphb/main/v1/day/rank?AppKey=joker&end=2021-03-09&rank_name=科技&rank_name_group=资讯&start=2021-03-09&nonce=399522de0"

      

      找到了h的字符串赋值,那么接下来看看g.xyz = d(h)中这个d()函数是什么,可在代码搜到d = a("md5");推测使用了MD5函数进行字符串h的加密,看里面也确实用到了MD5

    

 

    第四步:HTTP请求实际模拟

 

      nonce我这里随便填了一个11111111,保证是9位的就行。xyz通过MD5函数加密可得到  32位小写字符串(为什么是32位小写可以具体看看第三步断点看到的数据)

         

           最终结果,发现构造成功,获取到了目标新榜的排行榜数据,下一章我们将利用PYTHON来自动化实现上述步骤

   

        



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3