国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)

這篇具有很好參考價值的文章主要介紹了Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

導(dǎo)言

最近由于需求想爬取以下東方財富網(wǎng)的股票數(shù)據(jù),但是發(fā)現(xiàn)沒有想象那么簡單,接下來我會講述一下我遇到的問題以及是如何解決,最后成功的爬出了想要的數(shù)據(jù)。

查看網(wǎng)頁源碼

首先我們F12打開東方財富網(wǎng)網(wǎng)頁源碼,以指南針(300803)為例:
Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)
我們先點(diǎn)擊網(wǎng)絡(luò),再點(diǎn)擊300803.html,再選擇右邊彈出來的預(yù)覽響應(yīng),可以發(fā)現(xiàn),源碼中并沒有我們想要的股票數(shù)據(jù),但是再網(wǎng)頁中又有我們想要的收盤價等數(shù)據(jù),說明這很可能數(shù)據(jù)是Ajax動態(tài)加載出來的,一般而言數(shù)據(jù)會存儲再一個json文件之中。

找出儲存數(shù)據(jù)的json文件

我們很容易找到當(dāng)前網(wǎng)頁中該股票的當(dāng)日收盤價,所以我們可以以此為關(guān)鍵詞進(jìn)行搜索,搜索步驟為:在頁面右邊的網(wǎng)頁信息頁面,ctrl+F,即可打開搜索框,結(jié)果如下圖所示,發(fā)現(xiàn)有三個url文件包含該數(shù)值:
Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)
點(diǎn)擊進(jìn)去可以發(fā)現(xiàn)里面都有大量的數(shù)據(jù),這些數(shù)據(jù)也是網(wǎng)頁所顯示的數(shù)據(jù)來源,根據(jù)不同的數(shù)據(jù)需求,選擇某一個url進(jìn)行數(shù)據(jù)提取,接下來的數(shù)據(jù)提取以第二個URL為例,即K線圖的原始數(shù)據(jù)。

解析URL地址

該URL地址為:

https://push2his.eastmoney.com/api/qt/stock/kline/get?cb=jQuery1123008330414708828249_1669967900108&fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&ut=b2884a393a59ad64002292a3e90d46a5&klt=101&fqt=1&secid=0.300803&beg=20201202&end=20500000&_=1669967900117

可以發(fā)現(xiàn)里面有許多查詢參數(shù),我們需要一個一個進(jìn)行分析。
Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)

cb

該參數(shù)值為:

jQuery1123008330414708828249_1669967900108

通過查看其他股票代碼的網(wǎng)頁可以發(fā)現(xiàn),前綴jQuery是不變的,后面的一串?dāng)?shù)字有變化。點(diǎn)擊上一張圖負(fù)載旁邊的發(fā)起程序,可以發(fā)現(xiàn)發(fā)送操作異步加載操作的來源是

jquery.min.js

Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)
因此,打開該js文件,ctr+F搜索jQuery可以發(fā)現(xiàn)cb參數(shù)的來源,如下圖所示。結(jié)果表明該參數(shù)值是通過JS代碼賦值的。往前搜索m可以發(fā)現(xiàn)m為一個固定的字符串值1.12.3,這應(yīng)該是版本號;后面再添加一個0到1隨機(jī)數(shù)組合為一個字符串;最后的replace操作則是對該字符串所有非數(shù)字字符替換為空。因此下劃線前面的數(shù)字已經(jīng)被解讀出來了。
Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)
通過上圖可以發(fā)現(xiàn),該參數(shù)首先被賦值給變量expando,通過搜索我們很快的可以找到下劃線后面的數(shù)字來源,如下圖所示:
Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)
因此,這個變量Eb是關(guān)鍵。同理我們搜索變量Eb,可以發(fā)現(xiàn)該變量是一個時間戳,考慮其位數(shù),可以聯(lián)想到對當(dāng)前書簡戳乘以1000再取整,經(jīng)過檢驗(yàn)是正確的。
Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)
因而我們解讀出了該參數(shù)的構(gòu)成,python代碼實(shí)現(xiàn)如下:

jq = re.sub('\D','','1.12.3'+str(random.random()))
tm = int(time.time()*1000)
'jQuery{}_{}'.format(jq,tm)

fields1,fields2,ut,klt1,fqt

經(jīng)過對多個不同股票數(shù)據(jù)查詢的參數(shù)對比,容易發(fā)現(xiàn),這些參數(shù)都是一個固定值,只需要賦值即可

secid

顯而易見,該參數(shù)值小數(shù)點(diǎn)后是股票代碼。經(jīng)過對上交所,深交所,北交所的股票數(shù)據(jù)查詢發(fā)現(xiàn),若為上交所股票,小數(shù)點(diǎn)前為1,否則為0,所以python代碼構(gòu)建該參數(shù)如下:

 c = 1 if code[0]=='6' else 0
 {}.{}'.format(c,code)

beg,end,_

很顯然,這兩個參數(shù)就是股票數(shù)據(jù)查詢的起始日期和終止日期;可以發(fā)現(xiàn),下劃線參數(shù)與前面的cb參數(shù)的時間戳是一致的。

完整代碼

最后,完整爬取代碼如下,該代碼只是簡單的進(jìn)行了函數(shù)包裝,有精力的小伙伴可以將其包裝為一個類,本人水平有限,代碼僅供參考:文章來源地址http://www.zghlxwxcb.cn/news/detail-461435.html

#爬蟲程序
import requests
from lxml import etree
#from fake_useragent import UserAgent
import random
import time
import urllib
import json
#ua = UserAgent()

def Spider_stock(code_list,begin,end='20500000'):
    url = 'https://push2his.eastmoney.com/api/qt/stock/kline/get?'
    header ={'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.62",
                'Cookie':'qgqp_b_id=e66305de7e730aa89f1c877cc0849ad1; qRecords=%5B%7B%22name%22%3A%22%u6D77%u9E25%u4F4F%u5DE5%22%2C%22code%22%3A%22SZ002084%22%7D%5D; st_pvi=80622161013438; st_sp=2022-09-29%2022%3A47%3A13; st_inirUrl=https%3A%2F%2Fcn.bing.com%2F; HAList=ty-1-000300-%u6CAA%u6DF1300%2Cty-0-002108-%u6CA7%u5DDE%u660E%u73E0%2Cty-1-600455-%u535A%u901A%u80A1%u4EFD%2Cty-0-002246-%u5317%u5316%u80A1%u4EFD',
                'Referer':'https://data.eastmoney.com/',
                'Host':'push2his.eastmoney.com'}
    stock_df = pd.DataFrame(columns=['股票代碼','股票名稱',"時間",'開盤價','收盤價','最高價','最低價',"漲跌幅",'漲跌額',
                                        "成交量","成交額","振幅","換手率"])
    for code in code_list:
        #構(gòu)建url參數(shù)
        jq = re.sub('\D','','1.12.3'+str(random.random()))
        tm = int(time.time()*1000)
        c = 1 if code[0]=='6' else 0
        params={'cb':'jQuery{}_{}'.format(jq,tm),
                'fields1':urllib.request.unquote('f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6',encoding='utf-8'),
                'fields2':urllib.request.unquote('f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61',encoding='utf-8'),
                'ut':'b2884a393a59ad64002292a3e90d46a5',
                'klt':'101',
                'fqt':'1',
                'secid':'{}.{}'.format(c,code),
                'beg':begin,
                'end':end,
                '_':'{}'.format(tm)
        }
        #發(fā)送請求
        res = requests.get(url.format(code),headers=header,params=params)
        res.encoding="utf-8"
        #去除js數(shù)據(jù)中的無關(guān)字符,以便符合json數(shù)據(jù)格式
        html = res.text.lstrip('jQuery{}_{}'.format(jq,tm)+'(')
        html = html.rstrip(');')
        #轉(zhuǎn)換為json數(shù)據(jù)
        js_html = json.loads(html)
        js_data = js_html['data']
        js_klines = js_data['klines']
        day_num = len(js_klines)
        for num in range(day_num):
            stock_df.loc[len(stock_df)]=[str(js_data['code']),js_data['name'],js_klines[num].split(",")[0],js_klines[num].split(",")[1],
                                         js_klines[num].split(",")[2],js_klines[num].split(",")[3],js_klines[num].split(",")[4],
                                         js_klines[num].split(",")[8],js_klines[num].split(",")[9],js_klines[num].split(",")[5],
                                         js_klines[num].split(",")[6],js_klines[num].split(",")[7],js_klines[num].split(",")[10]
                                        ]
        time.sleep(0.1)
    return stock_df
if __name__ == '__main__':
	stock_df = Spider_stock(code_list,begin='20220915')

到了這里,關(guān)于Python爬取東方財富網(wǎng)任意股票任意時間段的Ajax動態(tài)加載股票數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 常用的時間段的時間戳

    獲取 昨天這個時間的時間戳 計算今天0點(diǎn)的時間戳 計算今天23點(diǎn)59分59秒的時間戳 計算昨天0點(diǎn)的時間戳 計算昨天23:59:59 秒的時間戳 計算近7日 0點(diǎn)的時間戳(不包含當(dāng)天) 計算近30天 0點(diǎn)的時間戳(不包含當(dāng)天) 計算上月第一天 0點(diǎn)的時間戳 計算上月最后一天 23點(diǎn)的時間戳 計算上周

    2024年02月10日
    瀏覽(19)
  • 【華為OD機(jī)考 統(tǒng)一考試機(jī)試C卷】會議室占用時間段(C++ Java JavaScript Python C語言)

    目前在考C卷,經(jīng)過兩個月的收集整理, C卷真題已基本整理完畢 抽到原題的概率為2/3到3/3, 也就是最少抽到兩道原題。 請注意:大家刷完C卷真題,最好要把B卷的真題刷一下,因?yàn)镃卷的部分真題來自B卷。 另外訂閱專欄還可以聯(lián)系筆者開通在線OJ進(jìn)行刷題,提高刷題效率。

    2024年02月01日
    瀏覽(19)
  • 查找接口成功率最優(yōu)時間段(100%用例)C卷(Java&&Python&&C++&&Node.js&&C語言)

    服務(wù)之間交換的接口成功率作為服務(wù)調(diào)用關(guān)鍵質(zhì)量特性,某個時間段內(nèi)的接口失敗率使用一個數(shù)組表示,數(shù)組中每個元素都是單位時間內(nèi)失敗率數(shù)值, 數(shù)組中的數(shù)值為0~100的整數(shù),給定一個數(shù)值(minAverageLost)表示某個時間段內(nèi)平均失敗率容忍值, 即平均失敗率小于等于minAver

    2024年01月25日
    瀏覽(21)
  • 【華為OD機(jī)考 統(tǒng)一考試機(jī)試C卷】查找接口成功率最優(yōu)時間段(C++ Java JavaScript Python)

    2023年11月份,華為官方已經(jīng)將 華為OD機(jī)考:OD統(tǒng)一考試(A卷 / B卷)切換到 OD統(tǒng)一考試(C卷)和 OD統(tǒng)一考試(D卷) 。根據(jù)考友反饋:目前抽到的試卷為B卷或C卷/D卷,其中C卷居多 ,按照之前的經(jīng)驗(yàn)C卷部分考題會復(fù)用A卷,B卷題,博主正積極從考過的同學(xué)收集C卷和D卷真題。

    2024年01月15日
    瀏覽(33)
  • uniapp 實(shí)現(xiàn)時間段選擇器

    uniapp 實(shí)現(xiàn)時間段選擇器

    u-popup結(jié)合picker-view搭配使用實(shí)現(xiàn)時間段選擇器 效果圖: ?

    2024年02月15日
    瀏覽(26)
  • 判斷兩個時間段是否有交集

    判斷兩個時間段是否有交集

    前言:項目中遇到了類似會議室預(yù)約的時間段被占用,預(yù)約車輛時間段被占用等。 start:預(yù)約開始時間。 end:預(yù)約結(jié)束時間。 必備條件:start = end 思考??: 怎么判斷是否被占用呢? 預(yù)約的時間,與目標(biāo)數(shù)據(jù)庫中任意一條的存在交集,則可以視為占用。 有交集的情況有那幾

    2024年02月03日
    瀏覽(37)
  • 獲取兩個時間段之間的年月

    ?//獲取兩個時間段之間的年月 ? ? ? ? getMonthBetween(start,end){ ? ? ? ? ? ? ? var result = []; ? ? ? ? ? ? ? var s = start.split(\\\"-\\\"); ? ? ? ? ? ? ? var e = end.split(\\\"-\\\"); ? ? ? ? ? ? ? var min = new Date(); ? ? ? ? ? ? ? var max = new Date(); ? ? ? ? ? ? ? min.setFullYear(s[0],s[1]); ? ? ? ? ?

    2024年03月21日
    瀏覽(22)
  • 【華為OD機(jī)考 統(tǒng)一考試機(jī)試C卷】查找接口成功率最優(yōu)時間段(C++ Java JavaScript Python C語言)

    目前在考C卷,經(jīng)過兩個月的收集整理, C卷真題已基本整理完畢 抽到原題的概率為2/3到3/3, 也就是最少抽到兩道原題。 請注意:大家刷完C卷真題,最好要把B卷的真題刷一下,因?yàn)镃卷的部分真題來自B卷。 另外訂閱專欄還可以聯(lián)系筆者開通在線OJ進(jìn)行刷題,提高刷題效率。

    2024年02月20日
    瀏覽(24)
  • hive sql,年月日 時分秒格式的數(shù)據(jù),以15分鐘為時間段,找出每一條數(shù)據(jù)所在時間段的上下界限時間值(15分鐘分區(qū))

    獲取當(dāng)前的年月日 時分秒 date_format(時間字段, ‘yyyy-MM-dd HH:mm:ss’) 將時間字段轉(zhuǎn)為 2023-10-18 18:14:16 這種格式 在指定時間上增加15分鐘 unix_timestamp:獲取當(dāng)前時間的UNIX時間戳(從 1970-01-01 00:00:00 UTC 到指定時間的秒數(shù)),然后加上 15*60 秒,即15分鐘,就得到了15分鐘后的時間戳

    2024年02月08日
    瀏覽(19)
  • docker查詢某時間段的日志

    參考:docker logs 查看docker容器日志詳解_Mym_zuoyan_Tmac的博客-CSDN博客_docker logs 查找

    2024年02月16日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包