数据爬虫:获取申万一级行业数据

news/2024/7/19 11:55:29 标签: 爬虫, 申万一级, python, 金融数据

目录

1. 获取访问接口

2. 链接网址

3. 链接名单

免责声明:本文由作者参考相关资料,并结合自身实践和思考独立完成,对全文内容的准确性、完整性或可靠性不作任何保证。同时,文中提及的数据仅作为举例使用,不构成推荐;文中所有观点均不构成任何投资建议。请读者仔细阅读本声明,若读者阅读此文章,默认知晓此声明。本文使用爬虫获取相关网站公开数据,仅作为技术分享使用,数据不涉及商用和盈利。

   申万一级行业数据,对于行业的统计分析非常重要,本文主要是分享,如何通过爬虫获取其历史收盘价数值。

1. 获取访问接口

    此方法由一位昵称为‘富贵’的大佬分享,在此对其表示感谢。

   许多数据源使用的是json传输到网页,使用xpath或者bs4均无法提取数据,因此需要使用直接访问传输文件对应的接口。

    首先根据网址名称申万宏源证券咨询网 (swhyresearch.com),F12获取相应的网页信息。

   根据网页信息,可以发现trend文件中包含所需数据 ,接下来复制该文本为URL(bash)。

  将获取的数据粘贴到 https://curlconverter.com/中,并切换语言为python

    这样一来,就可以获取类似于接口的代码:

import requests

cookies = {
    'i18next': 'zh-CN',
}

headers = {
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Connection': 'keep-alive',
    # 'Cookie': 'i18next=zh-CN',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
    'X-Access-Token': 'null',
    'clientType': '4',
    'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'token': '',
}

params = {
    'swindexcode': '801001',
    'period': 'DAY',
}

response = requests.get(
    'https://www.swhyresearch.com/institute-sw/api/index_publish/trend/',
    params=params,
    cookies=cookies,
    headers=headers,
)

2. 链接网址

    根据上述的代码,调整所需参数(参数位于params中,即申万一级行业对应的编码和数据频率),然后解析,即可获得数据(本文仅获取日期和收盘价)。

import requests
import pandas as pd
import sys

def get_sw_data(code, period=None):
    '''
    获取单个申万一级行业指数的收盘价
    code:str,指数编码,例如'801001'
    period:str,数据频率,例如'DAY',默认为日度;DAY-日度,WEEK-周度,MONTH-月度
    -------
    返回DataFrame,列名为日期和收盘价
    '''
    cookies = {'i18next': 'zh-CN', }
    headers = {
        'Accept': '*/*',
        'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'Connection': 'keep-alive',
        # 'Cookie': 'i18next=zh-CN',
        'Sec-Fetch-Dest': 'empty',
        'Sec-Fetch-Mode': 'cors',
        'Sec-Fetch-Site': 'same-origin',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
        'X-Access-Token': 'null',
        'clientType': '4',
        'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
        'token': '',
    }
    params = {'swindexcode': code, 'period': period or 'DAY'}
    response = requests.get('https://www.swhyresearch.com/institute-sw/api/index_publish/trend/',
                            params=params, cookies=cookies, headers=headers)
    # 判断是否提取到数据,若未拿到数据,自动退出
    if response.status_code == 200:
        print('链接成功!开始获取数据')
    else:
        print('链接失败!自动退出', response.status_code)
        sys.exit()

    # 解码并将数据转换为DataFrame,然后对所需字段进行转换
    text_json = response.json()
    data = pd.DataFrame(text_json["data"])
    # 日期转化为str,格式如'20200101'
    data['date'] = data['bargaindate'].apply(lambda x: pd.to_datetime(str(x)).strftime("%Y%m%d"))
    out_df = pd.DataFrame({'日期': data['date'], '收盘价': data['closeindex']})
    return out_df


if __name__ == '__main__':
    code = '801001'
    data = get_sw_data(code, 'MONTH')

  运行后,得到的结果为:

3. 链接名单

    第二节分享了如何获取单个申万行业指数的数据,本节主要分享如何获取申万行业的名单和编码,方法和之前一样。网址为申万宏源证券咨询网 (swhyresearch.com)

  对应的代码为: 

import requests
import pandas as pd

cookies = {'i18next': 'zh-CN', }
headers = {
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Connection': 'keep-alive',
    # 'Cookie': 'i18next=zh-CN',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
    'X-Access-Token': 'null',
    'clientType': '4',
    'sec-ch-ua': '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'token': '', }
# page--页数;page_size--单页展示多少条数据,最大50条
# 由于申万行业当前共有30多个,因此此处直接设置为50,不进行循环page的操作
params = {'page': '1', 'page_size': '50', 'indextype': '一级行业', 'sortField': '', 'rule': '', }
response = requests.get('https://www.swhyresearch.com/institute-sw/api/index_publish/current/',
                        params=params, cookies=cookies, headers=headers)
text_json = response.json()
data = pd.DataFrame(text_json["data"]['results'])
out_df = pd.DataFrame({'申万代码': data['swindexcode'],
                       '指数名称': data['swindexname']})

   对应的结果为:

     结合第二节,是用循环,就可以获取所有申万一级行业的指数 数据,需要注意的是,循环时尽可能设置一下访问的时间间隔,不要过度和过快的去访问。许多可优化的点,本文就不再深究。

    本期分享结束,有何问题欢迎交流。

免责声明:本文由作者参考相关资料,并结合自身实践和思考独立完成,对全文内容的准确性、完整性或可靠性不作任何保证。同时,文中提及的数据仅作为举例使用,不构成推荐;文中所有观点均不构成任何投资建议。请读者仔细阅读本声明,若读者阅读此文章,默认知晓此声明。本文使用爬虫获取相关网站公开数据,仅作为技术分享使用,数据不涉及商用和盈利。


http://www.niftyadmin.cn/n/5267775.html

相关文章

linux文件打包和压缩

7.2 文件打包和压缩 7.2.1 tar tar(英文全拼:tape archive )命令用于备份文件。 ​ tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。 ​ tar命令是Unix/Linux系统中备给文件的…

【已解决-实操篇】SaTokenException: 非Web上下文无法获取Request问题解决-实操篇

在上一篇《【理论篇】SaTokenException: 非Web上下文无法获取Request问题解决 -理论篇》中,凯哥(公众号:凯哥Java)介绍了了产生这个问题的源码在哪里,以及怎么解决的方案。没有给出实际操作步骤。 本文,凯哥就通过threadLocal方案…

动态通讯录(并不难都能拿下)

文章目录 🚀前言🚀通讯录实现动态通讯录的初期准备模块化框架搭建 🚀实现接口函数 🚀前言 铁子们好啊!今天咱们来整一个有意思的玩意——通讯录,相信大家对通讯录并不陌生,那接下来就跟着阿辉把…

C++——关于继承的一些补充

一&#xff0c;关于切割 class Person1 { public:void Print(){cout << "name:" << _name << endl;cout << "age:" << _age << endl;} protected:string _name "peter";//姓名int _age 18;//年龄 }; cla…

前端(二)

1.head内常用标签 <title>Title</title> 网页标题 <style>h1{color:greenyellow ;} </style> 内部用来书写CSS代码<script>alert(123) </script> 内部用来书写js代码 <script src"myjs.js"></script> 还可以引入外…

js 原型 和 原型链

function Person(name,age){ this.name name this.age age } var p new Person(张三,11) //创建构造函数的时候&#xff0c;解析器会自动为构造函数创建prototype属性&#xff0c;prototype属性对应的对象就是原型对象 // prototype 翻译为 原…

ubuntu20.04禁用自动更新(禁用更新、禁用自动升级、禁用apt更新、禁用apt升级、禁用软件更新、禁用系统更新)

想要禁用Ubuntu 20.04的所有自动升级&#xff0c;只需要修改两个文件&#xff1a; /etc/apt/apt.conf.d/10periodic&#xff1a; 这个文件控制APT的周期性任务。你需要编辑这个文件并设置所有选项为"0"&#xff0c;这将禁止任何定期的任务。 你可以使用以下命令快速完…

如何使用mysql去除表中重复的字段

简介&#xff1a; 此处的建表题目来自我们的也门哥Maged&#xff0c;非常感谢他出的这些测试题目&#xff0c;让我能够独立思考&#xff0c;反复试去找到cw2的正确做法。 数据库准备&#xff1a; 害怕被好homi被刺然后被 academic warning 所以浅浅打个码。 创建好这张表后我…