前面我們講過東方財富網獲取全部實時股票數據,今天來做一個個股的K線數據獲取。
獲取個股數據首先要有股票代碼,然后根據代碼來獲取,這個和我們瀏覽網頁的順序差不多,比如我們先找民航機場板塊:
然后進到白云機場個股:
然后放大K線到全屏:
我們抓取數據也要按照這個過程來做網站分析。
網站分析
板塊頁面的分析:
民航機場板塊共有13條數據,我們篩選jquery之后找一下對應的數據,然后找到對應的真實URL:
我們只要股票代碼和名稱,所以這個過程應該比較簡單。
接下來看個股K線全屏的頁面,檢查中篩選kl:
K線數據肯定比較多,通常都有幾千行,也要找到真實的URL:
這個URL我們要來分析一下:
后面的一大串字符,格式化顯示應該是這樣的
Fields1、2都是數據的名稱,也就是我們抓取的數據的列名稱,這個我們用別的方法來找,先不管他,beg、end是開始與結束時間,估計這個20500101就對應昨天,開始都默認是0。最關鍵的是secid這個是股票代碼,我們要抓取個股數據,就要修改這個值,這個值有兩部分組成小數點分割,前面的1代表滬市,如果是0代表深市,后面就是白云機場的股票代碼。
接下來說數據的名稱如何對應:
K線圖中有這樣一個數據塊,里面的漢字部分就對應了我們抓取的數據的列名稱,我們來找這個數據塊在源碼中的位置:
找到這個popfloatwin浮動窗口,復制這個element:
到Power Query中建立空白查詢,粘貼復制的內容:
是不是看著頭暈,沒關系,找到分析,選xml:
會自動解析:
展開后備用。
抓取數據
首先抓取民航機場板塊的股票名稱和代碼:
先去復制真實的URL,然后從web獲取數據:
這里要直接在公式欄里輸入三個函數來解析jsoncallback:
Json.Document(Text.BetweenDelimiters(Text.FromBinary(Web.Contents(真實URL)),"(",")"))
然后就是展開,我們不需要其他的內容,只要股票名稱和代碼:
這個查詢放這里備用。
然后是個股K線數據抓取:
同樣的直接復制對應的真實URL,然后抓取,方法與上面的方法一致:
然后展開,整理下格式,至于數據的表頭,我們可以在抓取全部數據后統一更改。
我們用這個查詢創建一個函數:
主要就是修改這個secid=號后面的內容,這里涉及到滬深兩市的數據抓取,直接判斷id的第一個符來修改小數點前面的部分,也可以,但是我比較懶,我就把這個函數直接復制一份,做一個0.的函數,然后在調用函數的時候用try..otherwise試著用第一個函數如果出錯就用第二個函數,這樣就保證兩市數據都能抓出來了。
我們回到板塊抓取的查詢,新建列調用這兩個函數:
然后展開數據:
前面三列我們自己手動修改一下,后面的用準備好的名稱來修改:
先整理一下名稱,Column1.2開始修改:
然后把原來的列名稱對應上:
調整一下位置:
然后我們到展開的查詢中使用Table.ToRows函數把上面這個表轉換成列表,替換列名稱:
最后修改一下數據類型數據就可以加載了。