抓取js動態生成的數據分析案例


需求:爬取https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.html頁面中的新聞數據。

分析:

  1.首先通過分析頁面會發現該頁面中的新聞數據都是動態加載出來的,並且通過抓包工具抓取數據可以發現動態數據也不是ajax請求獲取的動態數據(因為沒有捕獲到ajax請求的數據包),那么只剩下一種可能,該動態數據是js動態生成的。

  2.通過抓包工具查找到底數據是由哪個js請求產生的動態數據:打開抓包工具,然后對首頁url(第一行需求中的url)發起請求,捕獲所有的請求數據包。

分析js數據包響應回來的數據:

該響應數據對應的url可以在抓包工具對應的該數據包的header選項卡中獲取。獲取url后,對其發起請求即可獲取上圖中選中的相應數據,該響應數據類型為application/javascript類型,所以可以將獲取的響應數據通過正則提取出最外層大括號中的數據,然后使用json.loads將其轉為字典類型,然后逐步解析出數據中所有新聞詳情頁的url即可。

 

- 獲取詳情頁中對應的新聞詳情數據:對詳情頁發起請求后,會發現詳情頁的新聞數據也是動態加載出來的,因此還是跟上述步驟一樣,在抓包工具中對詳情頁中的局部數據進行搜索,定位到指定的js數據包:

 

該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的,然后批量進行數據請求,獲取響應數據,然后對響應數據進行解析即可完成最終的需求!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM