學習了幾天如何使用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可訪問下一時間段的數據。你自己指定當前時間戳到某一時間戳之間也沒問題。
原創首發于 lzw2016的博客
歡迎關注