1. 程式人生 > 實用技巧 >python爬取天天基金網所有基金資料

python爬取天天基金網所有基金資料

多執行緒+代理池爬取天天基金網、股票資料(無需使用爬蟲框架)

簡介

提到爬蟲,大部分人都會想到使用Scrapy工具,但是僅僅停留在會使用的階段。為了增加對爬蟲機制的理解,我們可以手動實現多執行緒的爬蟲過程,同時,引入IP代理池進行基本的反爬操作。

本次使用天天基金網進行爬蟲,該網站具有反爬機制,同時數量足夠大,多執行緒效果較為明顯。

技術路線

IP代理池

多執行緒

爬蟲與反爬

編寫思路

首先,開始分析天天基金網的一些資料。經過抓包分析,可知:./fundcode_search.js包含所有基金的資料,同時,該地址具有反爬機制,多次訪問將會失敗的情況。

同時,經過分析可知某隻基金的相關資訊地址為:fundgz.1234567.com.cn/js/ + 基金程式碼 + .js

分析完天天基金網的資料後,搭建IP代理池,用於反爬作用。搭建代理池,由於該作者提供了一個例子,所以本程式碼裡面直接使用的是作者提供的介面。如果你需要更快速的獲取到普匿IP,則可以自行搭建一個本地IP代理池。

搭建完IP代理池後,我們開始著手多執行緒爬取資料的工作。一旦使用多執行緒,則需要考慮到資料的讀寫順序問題。這裡使用python中的佇列queue進行儲存基金程式碼,不同執行緒分別從這個queue中獲取基金程式碼,並訪問指定基金的資料。由於queue的讀取和寫入是阻塞的,所以可以確保該過程不會出現讀取重複和讀取丟失基金程式碼的情況。

現在,開始編寫如何獲取指定基金的程式碼。首先,該函式必須先判斷queue是否為空,當不為空的時候才可進行獲取基金資料。同時,當發現訪問失敗時,則必須將我們剛剛取出的基金程式碼重新放回到佇列中去,這樣才不會導致基金程式碼丟失。

當訪問成功時,則說明能夠成功獲得基金的相關資料。當我們在將這些資料存入到一個.csv檔案中,會發現資料出現錯誤。這是由於多執行緒導致,由於多個執行緒同時對該檔案進行寫入,導致出錯。所以需要引入一個執行緒鎖,確保每次只有一個執行緒寫入。

至此,大部分工作已經完成了。為了更好地實現偽裝效果,我們對header進行隨機選擇。

最後,在main中,開啟執行緒即可。

通過對多執行緒和IP代理池的實踐操作,能夠更加深入瞭解多執行緒和爬蟲的工作原理。當你在使用一些爬蟲框架的時候,就能夠做到快速定位錯誤並解決錯誤。

資料格式

000056,建信消費升級混合,2019-03-26,1.7740,1.7914,0.98,2019-03-27 15:00

000031,華夏復興混合,2019-03-26,1.5650,1.5709,0.38,2019-03-27 15:00

000048,華夏雙債增強債券C,2019-03-26,1.2230,1.2236,0.05,2019-03-27 15:00

000008,嘉實中證500ETF聯接A,2019-03-26,1.4417,1.4552,0.93,2019-03-27 15:00

000024,大摩雙利增強債券A,2019-03-26,1.1670,1.1674,0.04,2019-03-27 15:00

000054,鵬華雙債增利債券,2019-03-26,1.1697,1.1693,-0.03,2019-03-27 15:00

000016,華夏純債債券C,2019-03-26,1.1790,1.1793,0.03,2019-03-27 15:00

功能截圖