python爬蟲如何獲取網頁資訊時,發現所需要的資訊是動態生成的,然後抓包獲取到資訊來源的URL?
如果在利用爬蟲爬取網頁資料的時候,發現是動態生成的時候,目前來看主要表現在以下幾種:
以介面的形式生成資料,這種形式其實挺好處理的,比較典型的是知乎的使用者資訊,我們只要知道介面的URL,就可以不用再考慮頁面本身的內容
以知乎為例,我們在爬取使用者資訊的時候,可能一開始的時候關注頁面本身的內容,希望通過解析頁面的結構來獲取想要的資料,實際上我們利用fiddler這樣的網路工具,很容易地發現這裡面其實有一個使用者資訊的介面在裡面,這樣的話我們爬取使用者的時候只需要關注此介面的邏輯就可以了。
如上圖所示,上面的介面將使用者的資訊都返回過來,所以我們通過處理該結果的json格式資料就可以了。
動態生成的內容直接寫入到網頁中,這個時候需要渲染引擎來幫助我們將javascript的執行結果渲染出來,splash正是我們需要的引擎,能夠方便快捷地幫助我們將javascript的內容渲染出來
splash是scrapy官方推薦使用的渲染引擎,能夠實現併發渲染多個頁面、為使用者返回頁面或者頁面截圖、在頁面中執行自定義的javascript程式碼等。以京東的圖書搜尋為例,搜尋list中的內容是通過javascript動態生成,我們要爬取其中的內容,就需要將資料渲染出來,利用splash可以很方便地做到這一點。下圖是利用splash渲染的程式碼
總之,針對不同的形態,我們需要先了解清楚相應的實現原理,然後根據實現原理採取相應的方案來爬取我們需要的資料。
你想通過python程式碼來判斷資料是不是動態生成的,這個目前來說,不好實現,至於利用python進行抓包分析,獲取資料的Request URL,這個實現起來複雜,而且沒有必要,手動F12很快就能發現答案,資料是不是動態的,一目瞭然。靜態的資料在網頁原始碼中,動態資料不在網頁原始碼中,對比網頁顯示內容和網頁原始碼,很直觀就發現了。
1.靜態資料如下。
網頁顯示內容:
網頁原始碼內容:
能在網頁原始碼中找到對應的資料,則不是動態載入的。
2.動態資料如下。
網頁顯示內容:
而實際資料如圖,不在網頁原始碼中,動態載入資料:
至於動態資料URL的話,你可以直接抓包分析就行,實現起來很簡單:
一般情況下,資料頁面的URL引數都是有規矩可循的,一頁一頁的翻轉,引數也是固定那幾個引數,值的話,會按規律以此遞增變化,但是有些網站會進行加密,這個你就要自己好好分析了。普通情況下,動態資料都是個json檔案,通過json包或正則表示式都可以完成資料的提取,希望以上內容對你有所幫助吧。