爬取通過ajax動態載入的頁面(實時監控華爾街見聞資訊與快訊)

爬取通過ajax動態載入的頁面(實時監控華爾街見聞資訊與快訊)

學習了幾天如何使用scrapy去爬取靜態網站,今天嘗試去爬取動態載入的網站。選取的網站是華爾街見聞,文中不會像往常一樣大篇幅講解每一步該如何做,而是探討如何爬取。

這裡寫圖片描述
這裡寫圖片描述

在原始碼中無法獲得全部資料(有的根本沒資料),但是通過下拉滑條可以看到網址不變但有資料載入出來,毫無疑問這就是動態載入的網頁。以下講解如何去尋找api介面取獲取資料。

開啟開發者工具,選擇Network,重新整理,選擇XHR,如圖。
這裡寫圖片描述

你可以從頭開始一個個點選,檢視響應(響應是指如下圖的工具臺上的響應)是否是你想要的資料。要麼就滑動滑條,看看新的請求中名字是否有類似的請求,一般就是。

這裡我們針對區塊鏈資料,如圖:
這裡寫圖片描述

然後我們檢視訊息頭的url,如‘https ://api-prod.wallstreetcn.com/apiv1/content/lives?channel=blockchain-channel&client=pc&cursor=1518567654&limit=20’,

請求的引數有:

channel=blockchain-channel
client=pc
cursor=1518567654
limit=20

在瀏覽器中開啟這個url,待定係數法刪除某個引數,看看哪些是必須的。
由此可以猜測

limit=20應該是限制請求資料條數,可刪;

client=pc字面意思應該是pc端;

channel=blockchain-channel這可能是指區塊鏈相關資料,不可刪;

cursor=1518567654初步懷疑要麼在頁面中,要麼是上一個頁面載入時附帶的資訊,查詢後沒找到。懷疑可能是時間戳,time模組驗證果真是當前時間。可刪,但實驗後發現沒有cursor最多可載入99條資料。

這只是針對區塊鏈一個版塊,其他都類似尋找即可,但找尋過程中發現了一個api提供和所有的資料。介面:https://api-prod.wallstreetcn.com/apiv1/content/lives/pc?limit=40

瀏覽器開啟,最好裝一個json相關的外掛,方便檢視資料。如圖
這裡寫圖片描述
看英文就能知道global,blockchain,a_stock,us_stock,forex ,commodity分別對應分為六大板塊:巨集觀,區塊鏈,A股,美股,外匯,商品。

就是這樣的

再附上資訊的介面api:

看清了這是程式碼別直接貼上了

'https://api-prod.wallstreetcn.com/apiv1/content/articles?category={}&limit=20&platform=wscn-platform'.format(p) for p in
['global','shares','commodities','china','us','europe','japan','charts','economy']

limit引數可人為控制,還有就是cursor引數。你能發現他返回的資料中帶有display_time,next_cursor這樣的資料,後者結合limit可訪問下一時間段的資料。你自己指定當前時間戳到某一時間戳之間也沒問題。