百度股市通获取指定股票盘口数据

以英洛华这只股票为采集对象,6月6日今开值为6.92,完整链接:https://gushitong.baidu.com/opendata?openapi=1&dspName=iphone&tn=tangram&client=app&query=600171&code=600171&word=600171&resource_id=5429&ma_ver=4&finClientType=pc

按F12刷新浏览器,重新请求,查找获取数据的请求信息,起初以为数据是存储在这个请求里的,但是一直找不到对应的数据,比如“今开”值

 

然后通过搜索,查询返回值,获得包含该返回值的请求信息,最终找到真正的请求

 

 正确的请求地址打开后返回一串json数据,且数据是比较多的,需要逐步筛查

 

 

在预览模式下,找到了目标数据段

 

 

 然后就是书写json表达式,获取数据

“['Result'][1]['DisplayData']['resultData']['tplData']['result']['minute_data']['pankouinfos']['origin_pankou']”

脚本执行后可返回,可对里面的数据进一步提取

 

完整python脚本

import requests
import json

cookies = {
    'PSTM': '1635248519',
    'BIDUPSID': '90EF3BD78F53BC8C96DF84CD3854CA2D',
    '__yjs_duid': '1_cd247776bc887ee300105fb75c8c2a331635258445589',
    'BDUSS': '1oWEtxQkpPR25ySTgtSHRHb0JOR2VXcm12MEk4V3ZBZ2VkOWZSVFI2QTBlWE5pRVFBQUFBJCQAAAAAAAAAAAEAAACRJsY-cGlwacnxu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTsS2I07EticS',
    'BDUSS_BFESS': '1oWEtxQkpPR25ySTgtSHRHb0JOR2VXcm12MEk4V3ZBZ2VkOWZSVFI2QTBlWE5pRVFBQUFBJCQAAAAAAAAAAAEAAACRJsY-cGlwacnxu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTsS2I07EticS',
    'BDORZ': 'B490B5EBF6F3CD402E515D22BCDA1598',
    'MCITY': '-158%3A',
    'BA_HECTOR': '8h242g8hah002l0g0g1h9pekn15',
    'ZFY': 'uYCFmlJSV5rn3KHYBSLi6naqucpmiTVS5c4ql8gHf3c:C',
    'BAIDUID_V4': '59DEA2219CA3CC71798923390803C00A:FG=1',
    'RT': '"z=1&dm=baidu.com&si=xgb0bofv4d&ss=l41exipa&sl=3&tt=jbz&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=12pi&ul=1jdc&hd=1jej"',
    'BDRCVFR[feWj1Vr5u3D]': 'I67x6TjHwwYf0',
    'delPer': '0',
    'PSINO': '2',
    'BAIDUID_BFESS': '488CA1A354CAFF05B0D67E0E09E83335:FG=1',
    'H_PS_PSSID': '36426_36549_36465_36455_36512_36452_36167_36488_36517_36074_36519_26350_36467_36314',
    'BAIDUID': 'B0C47089A4FF26A4CB78746AB1FD2529:FG=1',
    'Hm_lvt_c8bd3584daa59ca83c2ec1247d343576': '1654438355,1654506317',
    'Hm_lpvt_c8bd3584daa59ca83c2ec1247d343576': '1654506958',
}

headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'none',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-User': '?1',
    'Sec-Fetch-Dest': 'document',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    # Requests sorts cookies= alphabetically
    # 'Cookie': 'PSTM=1635248519; BIDUPSID=90EF3BD78F53BC8C96DF84CD3854CA2D; __yjs_duid=1_cd247776bc887ee300105fb75c8c2a331635258445589; BDUSS=1oWEtxQkpPR25ySTgtSHRHb0JOR2VXcm12MEk4V3ZBZ2VkOWZSVFI2QTBlWE5pRVFBQUFBJCQAAAAAAAAAAAEAAACRJsY-cGlwacnxu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTsS2I07EticS; BDUSS_BFESS=1oWEtxQkpPR25ySTgtSHRHb0JOR2VXcm12MEk4V3ZBZ2VkOWZSVFI2QTBlWE5pRVFBQUFBJCQAAAAAAAAAAAEAAACRJsY-cGlwacnxu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTsS2I07EticS; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; MCITY=-158%3A; BA_HECTOR=8h242g8hah002l0g0g1h9pekn15; ZFY=uYCFmlJSV5rn3KHYBSLi6naqucpmiTVS5c4ql8gHf3c:C; BAIDUID_V4=59DEA2219CA3CC71798923390803C00A:FG=1; RT="z=1&dm=baidu.com&si=xgb0bofv4d&ss=l41exipa&sl=3&tt=jbz&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=12pi&ul=1jdc&hd=1jej"; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; delPer=0; PSINO=2; BAIDUID_BFESS=488CA1A354CAFF05B0D67E0E09E83335:FG=1; H_PS_PSSID=36426_36549_36465_36455_36512_36452_36167_36488_36517_36074_36519_26350_36467_36314; BAIDUID=B0C47089A4FF26A4CB78746AB1FD2529:FG=1; Hm_lvt_c8bd3584daa59ca83c2ec1247d343576=1654438355,1654506317; Hm_lpvt_c8bd3584daa59ca83c2ec1247d343576=1654506958',
}

params = {
    'openapi': '1',
    'dspName': 'iphone',
    'tn': 'tangram',
    'client': 'app',
    'query': '600171',
    'code': '600171',
    'word': '600171',
    'resource_id': '5429',
    'ma_ver': '4',
    'finClientType': 'pc',
}

response = requests.get('https://gushitong.baidu.com/opendata', params=params, cookies=cookies, headers=headers).text
jsonobj = json.loads(response)
toCntPercent = jsonobj['Result'][1]['DisplayData']['resultData']['tplData']['result']['minute_data']['pankouinfos']['origin_pankou']
print(toCntPercent)

 

把脚本升级一下,从execl中读取股票代码,然后把爬去到的数据写到execl中

 

 直接贴代码

from subprocess import list2cmdline
import requests
import json
import openpyxl
import xlrd


cookies = {
    'PSTM': '1635248519',
    'BIDUPSID': '90EF3BD78F53BC8C96DF84CD3854CA2D',
    '__yjs_duid': '1_cd247776bc887ee300105fb75c8c2a331635258445589',
    'BDUSS': '1oWEtxQkpPR25ySTgtSHRHb0JOR2VXcm12MEk4V3ZBZ2VkOWZSVFI2QTBlWE5pRVFBQUFBJCQAAAAAAAAAAAEAAACRJsY-cGlwacnxu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTsS2I07EticS',
    'BDUSS_BFESS': '1oWEtxQkpPR25ySTgtSHRHb0JOR2VXcm12MEk4V3ZBZ2VkOWZSVFI2QTBlWE5pRVFBQUFBJCQAAAAAAAAAAAEAAACRJsY-cGlwacnxu7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADTsS2I07EticS',
    'BDORZ': 'B490B5EBF6F3CD402E515D22BCDA1598',
    'MCITY': '-158%3A',
    'BA_HECTOR': '8h242g8hah002l0g0g1h9pekn15',
    'ZFY': 'uYCFmlJSV5rn3KHYBSLi6naqucpmiTVS5c4ql8gHf3c:C',
    'BAIDUID_V4': '59DEA2219CA3CC71798923390803C00A:FG=1',
    'RT': '"z=1&dm=baidu.com&si=xgb0bofv4d&ss=l41exipa&sl=3&tt=jbz&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=12pi&ul=1jdc&hd=1jej"',
    'BDRCVFR[feWj1Vr5u3D]': 'I67x6TjHwwYf0',
    'delPer': '0',
    'PSINO': '2',
    'BAIDUID_BFESS': '488CA1A354CAFF05B0D67E0E09E83335:FG=1',
    'H_PS_PSSID': '36426_36549_36465_36455_36512_36452_36167_36488_36517_36074_36519_26350_36467_36314',
    'BAIDUID': 'B0C47089A4FF26A4CB78746AB1FD2529:FG=1',
    'Hm_lvt_c8bd3584daa59ca83c2ec1247d343576': '1654438355,1654506317',
    'Hm_lpvt_c8bd3584daa59ca83c2ec1247d343576': '1654506958',
}

headers = {
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'none',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-User': '?1',
    'Sec-Fetch-Dest': 'document',
    'Accept-Language': 'zh-CN,zh;q=0.9',
}

def 获取股票列股票代码():
    wb = xlrd.open_workbook('股票计划.xlsx')# 打开Excel文件
    data = wb.sheet_by_name('爬虫数据')#通过excel表格名称(rank)获取工作表
    b=data.col_values(2)#获取第三列数据(数组)
    list=[]
    for c in b[1:]:#for循环,排除第一行数据
        d=int(c)
        s="%06d" % d#股票代码一共有6位,常规打印无法打印出首位带0的代码的0部分,补齐缺失的0
        list.append(s)
    return(list)
    
code=获取股票列股票代码()

print("读取代码列表成功")

def 获取股票信息(code,cookies,headers):
    今开list = []
    最高list = []
    昨收list = []
    今日收盘list = []
    for num in code:
        params = {
            'openapi': '1',
            'dspName': 'iphone',
            'tn': 'tangram',
            'client': 'app',
            'query': ''+num+'',
            'code': ''+num+'',
            'word': ''+num+'',
            'resource_id': '5429',
            'ma_ver': '4',
            'finClientType': 'pc',
        }
        response = requests.get('https://gushitong.baidu.com/opendata', params=params, cookies=cookies, headers=headers).text
        jsonobj = json.loads(response)
        origin_pankou = jsonobj['Result'][1]['DisplayData']['resultData']['tplData']['result']['minute_data']['pankouinfos']['origin_pankou']
        今开 = origin_pankou['open']
        最高 = origin_pankou['high']
        昨收 = origin_pankou['preClose']
        今日收盘 = origin_pankou['currentPrice']
        今开list.append(今开)
        最高list.append(最高)
        昨收list.append(昨收)
        今日收盘list.append(今日收盘)
    数据list = list(zip(今开list,最高list,昨收list,今日收盘list))
    return(数据list)
data = 获取股票信息(code,cookies,headers)

print("获取股票数据成功")

def 保存数据(data):
        xfile = openpyxl.load_workbook('股票计划.xlsx')   
        sheet1 = xfile.worksheets[0]
        for i in range(len(data)):
            sheet1.cell(i+2, 6).value=data[i][0]#今开
            sheet1.cell(i+2, 7).value=data[i][1]#最高
            sheet1.cell(i+2, 5).value=data[i][2]#昨收
            sheet1.cell(i+2, 8).value=data[i][3]#今日收盘
        xfile.save('股票计划.xlsx')
保存数据(data)    

print("成功保存股票数据到文档")

 

posted @ 2022-06-06 19:05  小贝书屋  阅读(1795)  评论(0编辑  收藏  举报