抓取js动态生成的数据案列

摘要:
1.首先,通过分析页面,我们可以发现页面中的新闻数据是动态加载的,并且我们可以发现动态数据不是ajax请求通过数据捕获工具获得的动态数据(因为没有捕获ajax请求数据包),2。使用包捕获工具找出js请求生成了哪些动态数据:分析js包响应返回的数据:1响应数据对应的url可以在包捕获工具对应的包的头标签中获得。

本文博客采摘https://www.cnblogs.com/bobo-zhang/p/10561617.html?tdsourcetag=s_pcqq_aiomsg谨防转载

需求:爬取https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.html页面中的新闻数据。

分析:

  1.首先通过分析页面会发现该页面中的新闻数据都是动态加载出来的,并且通过抓包工具抓取数据可以发现动态数据也不是ajax请求获取的动态数据(因为没有捕获到ajax请求的数据包),那么只剩下一种可能,该动态数据是js动态生成的。

  2.通过抓包工具查找到底数据是由哪个js请求产生的动态数据:打开抓包工具,然后对首页url(第一行需求中的url)发起请求,捕获所有的请求数据包。

抓取js动态生成的数据案列第1张

分析js数据包响应回来的数据:

1抓取js动态生成的数据案列第2张

抓取js动态生成的数据案列第3张

该响应数据对应的url可以在抓包工具对应的该数据包的header选项卡中获取。获取url后,对其发起请求即可获取上图中选中的相应数据,该响应数据类型为application/javascript类型,所以可以将获取的响应数据通过正则提取出最外层大括号中的数据,然后使用json.loads将其转为字典类型,然后逐步解析出数据中所有新闻详情页的url即可。

- 获取详情页中对应的新闻详情数据:对详情页发起请求后,会发现详情页的新闻数据也是动态加载出来的,因此还是跟上述步骤一样,在抓包工具中对详情页中的局部数据进行搜索,定位到指定的js数据包:

2

抓取js动态生成的数据案列第4张

该js数据包的url为:

抓取js动态生成的数据案列第5张

详情页url,获取后,即可请求到该数据包对应的响应数据了,该相应数据中就包含了对应新闻详情数据了。注意,该响应数据的类型同样为application/javascript,所以数据解析同上!

分析首页中所有新闻的详情页url和新闻详情数据对应的js数据包的url之间的关联:

  - 首页中某一新闻详情页的url:            https://www.xuexi.cn/5c39c314138da31babf0b16af5a55da4/e43e220633a65f9b6d8b53712cba9caa.html

  - 该新闻详情数据对应的js数据包的url:https://www.xuexi.cn/5c39c314138da31babf0b16af5a55da4/datae43e220633a65f9b6d8b53712cba9caa.js

  - 所有的新闻详情对应的js数据包的黄色选中部分都是一样的只是红色部分各自不同,但是红色部分却和该新闻详情页的url中的红色部分是相同的!!!新闻详情页的url是可以在上述过程中解析出来的。因此现在就可以批量产生出详情数据对应js数据包的url的,然后批量进行数据请求,获取响应数据,然后对响应数据进行解析即可完成最终的需求!

免责声明:文章转载自《抓取js动态生成的数据案列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动MySQL开发设计规范下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用 js 测试 websocket 连接

参考:https://blog.csdn.net/linysuccess/article/details/109223712 配合上篇文章,代码如下: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <m...

js禁止微信浏览器下拉显示黑底查看网址,不影响内部Scroll

开发项目跑在微信浏览器经常会遇到一个问题,微信浏览器下拉的时候会出现自带的黑色底色(显示网址)如下图: 网上好多js禁止操作的做法禁止了内部Scroll,导致页面不能滚动,上拉加载失效,例如这种做法: $(‘body’).on(‘touchmove’, function (event) {event.preventDefault();}); or doc...

php判断表单是否提交

我们一般通过 submit 提交表单时,会在乎在表单中填写的一大堆数据是否提交到后台。这里就需要做个判断,使用php代码来判断表单数据是否被提交一般采用如下的形式:大理石平台保养 1 2 3 4 5 <?php if(isset($_POST['submit'])) {   echo" 数据被提交过来了"; } ?> 说明:is...

window.open()打开新窗口教程

使用 window 对象的 open() 方法可以打开一个新窗口。用法如下: window.open (URL, name, features, replace) 参数列表如下: URL:可选字符串,声明在新窗口中显示网页文档的 URL。如果省略,或者为空,则新窗口就不会显示任何文档。 name:可选字符串,声明新窗口的名称。这个名称可以用作标记 <...

JSONP原理解析

前言 我工作以来接触的第一个项目就是前后端分离的,前端静态文件有自己独立域名,通过接口来获取数据进行渲染等操作。 跨域的方法不需要多言,随便一搜,就有很多,但最常用不外乎jsonp和CORS。jsonp着重于前端,也算是前端Hack技巧,CORS重于后端,服务端需要配置的地方会较多。 这篇解析一下jsonp的实现原理。 基本原理 基本原理很容易说明白,在h...

JS 数据转换

转换成字符串类型 toString() var num = 5;console.log(num.toString()); String() String()函数存在的意义:有些值没有toString(),这个时候可以使用String()。比如:undefined和null 拼接字符串方式 num + "",当 + 两边一个操作符是字符串类型,一...