前幾天有位朋友向我求助,想讓我寫個爬蟲幫他爬取基金的數據。樂於助人的我怎麼會袖手旁觀呢?首先捋一捋思路:獲取網頁→獲取一條數據→獲取所有數據→把數據保存爲文件。有了思路就開幹嘍~朋友須要獲取的數據來源於每天基金網的基金排行頁,先來觀察一下它的結構。每個基金都在一行,翻頁可獲取下一頁基金。ajax
獲取數據正則表達式
先試試能不能用requests庫直接獲取數據吧。瀏覽器
emmm。。。看來是編碼不對,改一下編碼試試。在瀏覽器按F12查看一下網頁是什麼編碼的。框架
換一個編碼後就行了。接下來獲取一條數據,觀察一下網頁的代碼,基金的代碼在a標籤裏,此次使用xpath來獲取數據。(不會使用xpath的小夥伴能夠戳這裏)ide
嗯?怎麼會沒有數據呢?代碼應該沒錯的鴨QAQ。。。在屢次嘗試仍然沒有獲取到數據後只好去求助小哥哥了。。。
編碼
小哥哥說這多是網頁使用ajax技術來獲取數據的,網頁原本只是個框架,因此requests獲取的網頁沒有數據。在網上查閱資料後,我終於弄懂是怎麼回事了。網頁就是一個框架,每次獲取數據後(例如翻頁)就把數據更新到預約的地方(紅色框部分),這樣就不用從新加載網頁。spa
小哥哥教我在瀏覽器按F12後再按網頁的翻頁按鈕,就能看到請求的網址,用requests庫就能獲取數據了。3d
無訪問權限。。。看來被識別到是爬蟲了,加個請求頭試試。blog
數據獲取到了,用eval()加正則表達式把數據提取出來。圖片
獲取所有數據
接下來寫個循環獲取所有數據。根據觀察,pi這個參數就是頁數,使用字符串格式化的方法便可獲取所有數據。
把數據保存爲文件
數據都獲取到了,最後就是把它們保存到文件裏,這裏選擇保存爲csv格式。