【Python】抓取基金數據

来源:https://www.cnblogs.com/123456feng/archive/2022/03/30/16077203.html
-Advertisement-
Play Games

相信有很多朋友還是喜歡買基金的,今天剛好有時間就給大家來一個基金的。雖然暴富不可能,但是對於理財方面還是有所幫助的。代碼就放在下麵了。 爬蟲常規思路: 1.分析網頁2.對網頁發送請求,獲取響應3.提取解析數據4.保存數據 Python版本:3.6.5 import requests import t ...


相信有很多朋友還是喜歡買基金的,今天剛好有時間就給大家來一個基金的。雖然暴富不可能,但是對於理財方面還是有所幫助的。代碼就放在下麵了。

  在這裡插入圖片描述

 

爬蟲常規思路:

1.分析網頁
2.對網頁發送請求,獲取響應
3.提取解析數據
4.保存數據

Python版本:3.6.5
import requests
import time
import csv
import re

 

分析網頁

其實這個網站的網頁數據沒有太多的反爬,就是網頁需要構建一個params的參數,該參數裡面包含了網頁翻頁的數據,時間戳的數據,這些是動態的,需要怎麼自己指定一下,如圖所示:

在這裡插入圖片描述

如上分析後,就可以對該鏈接發送請求了,但是這個網站還有一個和別的地方不一樣的,他給你返回的不是html源碼,也不是json數據,而是字元數據,如圖:
在這裡插入圖片描述

我們可以看到這些不同html和json數據,所以就需要用到正則表達式老進行過濾提取了。經過以上分析,我的大體思路就是,先爬取一頁的數據,利用正則提取,能成功爬取到一頁的數據後,只用做一個迴圈遍歷,就可以爬取多頁的數據了。

在這裡插入圖片描述

代碼部分:

構建請求需要的參數

###
###Python學習交流Q群:906715085####
 def get_params(self):   
      """     
 構建params參數的方法       
  :return:    
      """    
params = {          
  "t": "1",          
    "lx": "1",          
      "letter": "",           
       "gsid": "",           
        "text": "",          
          "sort": "zdf,desc",          
            "page": f"{str(self.page)},200",            
            "dt": str(self.TIMESTRF),            
            "atfc": "",          
              "onlySale": "0",    
                  }       
                   return params

 

dt這個參數上面說了,是一個不正規的時間戳,那麼我們怎麼辦,思路是,用time模塊先提取出真正的當前時間戳,然後用int()把他強制轉換成整數,然後乘以1000,就可以得到這個不正規的時間戳了,在構建的時候,在把這個時間戳轉換成str()就可以了。

int(time.time()) * 1000

 

發送請求,獲取響應數據

def parse_url(self, url):       
 """        
 發送請求,獲取響應數據的方法       
  :param url:       
 :return:        
 """      
   params = self.get_params()       
    response = requests.get(url, headers=self.headers, params=params)    
        if response.status_code == 200:            
        return response.content.decode()

 

提取數據

def get_data(self, data_str):  
      """       
       提取基金數據的方法 
              :param data_str:   
                   :return:     
   """       
    str_data = re.findall('var db=.*,datas:(.*),count:.*}', data_str, re.S)[0]       
     data_list = eval(str_data)        
     for data in data_list:            
     yield {              
       '基金代碼': data[0],              
         '基金簡稱': data[1],               
          '單位凈值': data[3],               
           '累計凈值': data[4],               
            '日增長值': data[6],                
            '日增長率': data[7],              
              '手續費': data[17]          
                }

 

在這裡插入圖片描述

實現程式的完整思路

def run(self):      
   """    
 實現主要邏輯思路       
  :return:      
    """       
     with open('./jjData.csv', 'a', encoding='utf-8-sig', newline="") as csvfile:           
      fieldnames = ['基金代碼', '基金簡稱', '單位凈值', '累計凈值', '日增長值', '日增長率', '手續費']            
      write_dict = csv.DictWriter(csvfile, fieldnames=fieldnames)            
      write_dict.writeheader()           
       # 1,發送請求,獲取響應數據            
       data_str = self.parse_url(self.API_URL)           
        # 2,提取數據          
          fund_data_list = self.get_data(data_str)           
           for fund_data in fund_data_list:               
            print(fund_data)               
             # 3,保存數據             
                write_dict.writerow(fund_data)

 

效果展示

在這裡插入圖片描述

END

最後,到這裡就沒有了,不懂的小伙伴可以跟著視頻學一遍,這一篇文章到這裡就接近尾聲了,喜歡的小伙伴可以點贊,不懂的小伙伴評論留言。

在這裡插入圖片描述


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、需求:創建一個HashMap集合,鍵是學號(String),值是學生對象(Student),存儲三個鍵值對元素,並遍歷 分析: 1.定義學生類 2.創建HashMap集合對象 3.創建學生對象 4把學生添加到集合中 5.遍歷集合 public class StudentDemo { public ...
  • 前言: 請各大網友尊重本人原創知識分享,謹記本人博客:南國以南i 上篇我們介紹到 保姆教程系列一、Linux搭建Nacos 註冊中心原理 一、環境準備 Java版本:1.8+ (Linux centos7虛擬機下安裝Jdk1.8) MySQL服務:5.6.5+ (Linux Centos7 安裝My ...
  • 遞歸:方法定義中調用方法本身的現象 註意事項: * A:遞歸一定要有出口,否則就是死遞歸 * B:遞歸的次數不能太多,否則就記憶體溢出 * C:構造方法不能遞歸使用 階乘案例 package cn.itcast_02; /* * 需求:請用代碼實現求5的階乘。 * 下麵的知識要知道: * 5! = 1 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 另有一篇我的字元編碼本質入門的文章見這裡:https://www.cnblogs.com/uncleguo/p/16008551.html 實話說,作為一個多年Java老年程式員,直到近來,在沒有決心花時間搞清楚Java String的編碼相關問題之前, 自己也都還是似懂非懂,一臉懵逼的。設想如果在 ...
  • 一、前言 好想看電視啊!!沒有會員,怎麼辦啊?想線上觀看或下載愛奇藝、PPTV、優酷、網易公開課、騰訊視頻、搜狐視頻、樂視、土豆、A站、B站等主流視頻網站的VIP視頻?又不想充會員怎麼辦?今天給你分享Python小技巧,實現你的VIP看電視的夢想。 PS:本軟體只用來交流學習,請勿用於商業用途。如涉 ...
  • 要求:通過 jQuery 優化網站源代碼中的發送 Ajax 請求部分 ...
  • Java課程的第三周作業,重點考察了異常的處理,其中第9題比較有意思,是對自定義異常類的繼承問題。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...