1. 程式人生 > >Python爬蟲實戰 :批量採集股票資料,並儲存到Excel中

Python爬蟲實戰 :批量採集股票資料,並儲存到Excel中

小編說:通過本文,讀者可以掌握分析網頁的技巧、Python編寫網路程式的方法、Excel的操作,以及正則表示式的使用。這些都是爬蟲專案中必備的知識和技能。本文選自《Python帶我起飛》。

例項描述:通過編寫爬蟲,將指定日期時段內的全部上市公司股票資料爬取下來,並按照股票程式碼儲存到相應的Excel檔案中。

這個案例主要分為兩大步驟:

(1)要知道上市公司有哪些;

(2)根據每一個上市公司的股票編號爬取資料。

由於兩部分程式碼相對比較獨立,可以做成兩個程式碼檔案。一個檔案用來爬取股票程式碼,另一個檔案用來爬取股票內容。

1 爬取股票程式碼

爬取股票程式碼的基本思路是:

(1)分析網站上的網頁原始碼,找到目的碼。

(2)利用正則表示式,在整個網頁裡搜尋目的碼,從而提取出所要的資訊(股票程式碼)。

有關金融證券領域的網站一般都會有上市公司的股票程式碼資訊。隨便找一個即可。

1.1 找到目標網站

1.2 開啟除錯視窗,檢視網頁程式碼

保持當前瀏覽器視窗為活動頁面,按F12鍵顯示出網頁的原始碼除錯視窗,單擊除錯視窗的Element按鈕,可以看到頁面的HTML程式碼。

圖2 除錯視窗

1.3 在網頁原始碼中找到目標元素

網頁的原始碼是按照HTML的語法規則自動摺疊的。可以用游標在HTML程式碼中任意單擊將其展開。當游標移動到某個元素時,會看到右測網頁中對應的元素會有變化,呈現被選中狀態。

圖3 選中元素

箭頭所指的網頁原始碼,就是需要關注並爬取的內容。

1.4 分析目標原始碼,找出規律

分析上圖中左側顯示的內容,與右側程式碼之間的對應關係。不難發現,左側顯示的每個股票程式碼所對應的原始碼格式都是固定的。

圖4 目標原始碼內容

原始碼內容,便是要找到的目的碼。將程式碼整理成如下字串模版:

【程式碼1】

其中,“.html”前面的“股票程式碼”就是需要抓取的內容。分析到這裡,開發任務就轉化成:在整個網頁的原始碼中,找到這樣結構的字串,並將其中的股票程式碼提取出來。

1.5 編寫程式碼抓取股票程式碼

編寫程式碼實現urlTolist函式,並在該函式裡實現主要的抓取功能:

(1)通過使用urllib.request模組中的urlopen函式訪問目的連結;

(2)通過urlopen返回值的read方法獲得網頁的全部內容;

(3)使用re模組下的compile函式來做正則表示式的計算模版,其模版字串就是之前分析的網頁目的碼;

(4)呼叫re.compile返回物件的findall方法,來對網頁的HTML程式碼進行正則表示式計算。得到的返回值code便是最終的爬取結果。

程式碼1:爬取股票程式碼

【程式碼2】

在上面程式碼中,函式urlTolist的最後4行程式碼是為了讓結果更加有效而做的數值驗證。即,只有6(上海證交所)、0(深圳證交所)、3(創業板)打頭的股票程式碼是有效程式碼。

在程式碼中,正則表示式的模版部分(程式碼中的第9行),有這麼一段程式碼“\S\S(.*?)”。其中,兩個“\S”表明每個股票程式碼的前兩個都是字元,是要跳過的地方。後面的括號及裡面的內容,表示需要讓正則表示式來抓取的部分。(關於正則表示式,不在本書介紹的內容之內,有興趣的讀者可以自行研究。不瞭解也沒關係,直接這麼使用即可。)

1.6 執行程式碼,顯示結果

程式碼執行後,顯示如下內容

【程式碼3】

可以看到,爬取的結果是以list的方式存放的。前10條都是上海證交所的股票。

2 爬取股票內容

通過訪問網易提供的服務介面,可以獲取到股票內容。只需按照其提供的請求格式,傳入股票程式碼及所要檢視的時間段,即可得到該股票的具體資料。

為了爬取全部資料,需要遍歷所有的股票程式碼,並呼叫網易的服務介面。

2.1 編寫程式碼抓取批量內容

在程式碼實現上,仍然使用urllib.request模組進行網路請求,並將呼叫urllib.request模組下的urlretrieve函式,將返回的資料儲存到Excel表裡。程式碼如下:

程式碼11-2:爬取股票內容

【程式碼4】

程式碼中,設定的時間段為1個月,即從20161131到20161231。

儲存的結果放在D盤的all_stock_data路徑下。為了保證儲存操作正常執行,需要確保D盤下存在all_stock_data資料夾(若沒有,需要建立一個)。

2.2 執行程式碼顯示結果

執行程式碼,輸出如下結果:

【程式碼5】

程式碼執行結束之後,可以D盤的all_stock_data資料夾下找到生成的股票資料檔案。

圖5 股票資料檔案

至此,爬取股票資料的案例就結束了。讀者可以根據上面的知識,在網上爬取更多自己需要的內容。另外,爬取的結果還可以儲存到MySQL或其他型別檔案中。

以上內容取自電子工業出版社《python帶我起飛——入門、進階、實戰》一書。