本文博客採摘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的,而後批量進行數據請求,獲取響應數據,而後對響應數據進行解析便可完成最終的需求!