爬蟲之抓取js生成的數據


  有很多頁面,當我們用request發送請求,返回的內容里面並沒有頁面上顯示的數據,主要有兩種情況,一是通過ajax異步發送請求,得到響應把數據放入頁面中,對於這種情況,我們可以查看關於ajax的請求,然后分析ajax請求路徑和響應,拿到想要的數據;另外一種就是js動態加載得到的數據,然后放入頁面中。這兩種情況下,對於用戶利用瀏覽器訪問時,都不會發現有什么異常,會迅速的得到完整頁面。

  其實我們之前學過一個selenium模塊,通過操縱瀏覽器,然后拿到瀏覽器顯示出來的數據,這種方式是可以拿到數據的,但本節是要分析如何找到那個js在控制數據的生成,及js發送請求的路徑,從而我們可以向這個路徑發送請求,直接就得到數據。

  在之前的爬蟲過程中,我最煩的就是關於js動態生成的數據,我根本無法找到是哪一個js實現的(因為js太多了),今天看了大佬的博客,瞬間感覺簡單了很多,謝謝大佬,祭出大佬的博客:https://www.cnblogs.com/bobo-zhang/p/10561617.html

  一、需求描述及頁面分析

  1,需求描述

  基礎頁面路徑:https://www.xuexi.cn/f997e76a890b0e5a053c57b19f468436/018d244441062d8916dd472a4c6a0a0b.html

  點擊進入每個標題里面:

  需求就是爬取每個標題下的新聞內容

  2,頁面分析

  2.1 主頁面

  查看ajax請求:

  接下來我們就解析如何找出發送請求的js

  二、查找發送請求的js

  在響應的數據里,包含新聞標題,以及本條新聞的詳情頁路徑,於是現在我們去訪問詳情頁,以及分析詳情頁

  訪問詳情頁,查看詳情頁的響應,數據里面也沒包含具體數據,那它就和主頁面一樣,接下來去看ajax:

  ajax並沒有新聞相關數據,所以不是利用ajax請求拿到數據的,那只有剩下js了,我們就去尋找是哪個js發送的請求來獲取數據,步驟上面一致:

詳情頁數據的js請求路徑:

詳情頁請求路徑:

  我們可以看到,詳情頁數據的請求路徑在最后一個斜杠前面的路徑和詳情頁的請求路徑在最后一個斜杠前面都是一樣的。於是我們可以這樣:

第一步:拿到詳情頁的請求路徑:
url1='https://www.xuexi.cn/1ed1e76f885a3c19576e495ad2b279e5/e43e220633a65f9b6d8b53712cba9caa.html'
第二步:把url1最后一個斜杠后面的內容替換掉
url2='https://www.xuexi.cn/%s/datae43e220633a65f9b6d8b53712cba9caa.js'%(url1.split('/')[3])  #把url1用‘/’分割,拿到第四部分,即索引為3,然后拼接進去既可
這樣就構造好了一個詳情頁數據請求路徑,然后直接去訪問這個路徑既可拿到數據,就不用去訪問詳情頁了

 


免責聲明!

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



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