今天是八月2號,自學python爬蟲已經一整個月了。不學不理解,真正學了才發現,python不愧是一門博大精深的高級編程語言,我學到現在也才只見識到它冰山一腳,python應用的范圍即便相比於c、c++、java等老牌語言也不逞多讓;爬蟲只是它龐大功能體系的一種,而我一個月來的學習單論爬蟲這一塊來說也只能說堪堪入門,距離熟練使用再到掌握還有很遙遠的路程。
雖然爬蟲的路途依舊遙遠,但一個月的努力也不可能白費,想起來還沒有嘗試過股票數據的抓取,為了檢測進度,也算打磨打磨暑期時間,just do it!
既然要爬取網站的股票信息,那就要選好目標網站,根據網絡爬蟲的robots協議的協定和大站優先的爬蟲策略,在觀察了多家股票大頭網站后,我最終選定了——‘東方財富網’進行數據爬取,該網站robots.txt文件信息如下
可以看見,該網站允許所有搜索引擎按照robots協議合理的抓取網站中的所有文件、目錄。那么我就可以放心大膽的進行爬蟲了!
進入該網站找到滬深A股所有個股的列表界面,方便爬蟲爬取信息
打開開發者工具進行數據定位發現html源碼中並沒有我想要的股票信息,由此可以知道這個網站使用了js異步加載。那我平時最常用的requests庫是肯定沒辦法爬的,我第一時間想到的是使用network進行抓包分析和selenium+chromedriver無頭模式這兩種方式
我首先嘗試了抓包分析js代碼來找到股票信息數據或url,在network找可疑的js代碼塊,發現有這兩條比較可疑的js代碼
復制這兩個js代碼的請求頭鏈接進入后找到這個
已經出現了該頁面的表頭介紹,如下圖。本以為真實鏈接呼之欲出,再仔細一看發現href字段有一些奇奇怪怪的字符,還有f1,f2,f3…奇怪的fields字段,看來網站對他們的數據加密措施實施地很到位嘛,,,,毫無頭緒、無計可施、知識盲區,抓包方式失敗!
條條大路通羅馬,既然抓包這條路走不通,那就換一條路——上selenium加谷歌無頭瀏覽器這一大殺器,selenium在爬蟲中可謂無往不利,只要瀏覽器用戶可以在客戶端使用瀏覽器能夠瀏覽的網頁它都能爬,完美解決js動態加載頁面的問題,缺點就是爬蟲效率不高且對於流浪黨很不友好。因為selenium是一款自動化監測工具,極大程度模擬人的瀏覽網頁的動作,每個頁面每個版塊都要加載,相比於requests效率不足且耗費流量。但這些都並不重要,用python寫爬蟲本就不是為了它的時間效率,而是圖個簡潔圖個方便。
首先導入相關庫,設置Chrome的無頭參數:
因為個股信息量比較大,使用單線程同步運行的方式速度很慢,於是我還用到了替換threading多線程庫加大爬蟲效率,為了使爬蟲爬取的數據便於統計觀察導入了xlwt模塊將信息寫入excel表格中並保存本地(下圖為在主函數設置必要參數,創造線程)
還差最重要的一步:設計一個進行url請求、元素定位、數據存儲的主要函數(此處因為博主突發懶癌而將這些功能全套在了一個getStockInfo函數里)
核心代碼完,至此爬蟲已經完成,看看最終實現效果(跪求沒有bug!跪求沒有bug!!跪求沒有bug!!!):
大獲成功,ye!!
數據已經成功爬取,不過還有很多地方需要完善,之后我還會引入python的定時任務調度器,每天收盤時刻准時爬取當天股票最新信息,這樣就可以足不出戶每天坐收行情信息了,權當是一種菜雞碼手無聊之余的樂趣