本文博客采摘https://www.cnblogs.com/bobo-zhang/p/10561617.html?tdsourcetag=s_pcqq_aiomsg谨防转载javascript
需求:爬取https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.html页面中的新闻数据。html
分析:java
1.首先经过分析页面会发现该页面中的新闻数据都是动态加载出来的,而且经过抓包工具抓取数据能够发现动态数据也不是ajax请求获取的动态数据(由于没有捕获到ajax请求的数据包),那么只剩下一种可能,该动态数据是js动态生成的。ajax
2.经过抓包工具查找到底数据是由哪一个js请求产生的动态数据:打开抓包工具,而后对首页url(第一行需求中的url)发起请求,捕获全部的请求数据包。json
分析js数据包响应回来的数据:app
1工具
该响应数据对应的url能够在抓包工具对应的该数据包的header选项卡中获取。获取url后,对其发起请求便可获取上图中选中的相应数据,该响应数据类型为application/javascript类型,因此能够将获取的响应数据经过正则提取出最外层大括号中的数据,而后使用json.loads将其转为字典类型,而后逐步解析出数据中全部新闻详情页的url便可。url
- 获取详情页中对应的新闻详情数据:对详情页发起请求后,会发现详情页的新闻数据也是动态加载出来的,所以仍是跟上述步骤同样,在抓包工具中对详情页中的局部数据进行搜索,定位到指定的js数据包:htm
2blog
该js数据包的url为:
详情页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的,而后批量进行数据请求,获取响应数据,而后对响应数据进行解析便可完成最终的需求!