爬虫实战——爬取股价数据(以比亚迪为例)

相关文章

车主之家销量爬虫
易车网销量爬虫
使用jsonpath时的bug记录



前言

2022年10月24日特斯拉率先在6连涨后宣布降价,又在11月8日宣布推出保险方面的让利政策,因此本文将从股价上入手,从某证券网站上爬取比亚迪2022年10月-2023年2月的股价数据,观察在此时间节点比亚迪股价是如何变的。


以下基于requests和jsonpath采集比亚迪每日股价等数据

一、数据来源

数据均来源于某证券网站,股价数据实时变动。

二、分析网页

在这里插入图片描述
查看网页源代码可以发现源码中是没有数据的,网页数据是通过某方**Choice数据实时加载的。
在这里插入图片描述
之后再找到源数据发现都是字典类型的,因此下面通过jsonpath进行解析,对应格式化地址为:https://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery112305522640988534238_1680571452074&reportName=RPT_VALUEANALYSIS_DET&columns=ALL&quoteColumns=&pageNumber=1&pageSize=5000&sortColumns=TRADE_DATE&sortTypes=1&source=WEB&client=WEB&filter=(SECURITY_CODE=%22002594%22)&_=1680571452075
可以发现json格式化的开头有以jQuery开头的一串字符串和括号不是json格式,解析时肯定会有错误,关于这个问题之前的bug记录有提到过,解决方案时使用正则表达式处理,文章链接为:http://t.csdn.cn/2Ft8M
代码如下:

import requests
import json
import re

url = 'https://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery112305522640988534238_1680571452074&reportName=RPT_VALUEANALYSIS_DET&columns=ALL&quoteColumns=&pageNumber=1&pageSize=5000&sortColumns=TRADE_DATE&sortTypes=1&source=WEB&client=WEB&filter=(SECURITY_CODE=%22002594%22)&_=1680571452075'
headers={'referer':r'https://data.eastmoney.com/',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.62'}

rsp = requests.get(url=url,headers=headers)
rsp_sub = re.sub('^jQuery112305522640988534238_1680571452074\(', '', rsp.text)
rsp_sub_2 = re.sub('\);', '', rsp_sub)
rsp_json = json.loads(rsp_sub_2)
print(rsp_json)

三、步骤

1.引入库

import requests
import jsonpath
import json
import re
import pandas as pd

2.爬取数据

这里选取2022年10月10日-2023年2月29日的数据,对数据日期、股价、当日涨跌幅(%)、总市值四项数据进行抓取,并整理为DataFrame格式,代码如下(示例):

list = []
df = pd.DataFrame(list).T
for i in jsonpath.jsonpath(rsp_json,'$..data')[0]:
    TRADE_DATE = jsonpath.jsonpath(i,'$.TRADE_DATE')
    if TRADE_DATE[0] < '2022-10-10' or TRADE_DATE[0] > '2023-02-29':
        pass
    else:
        list.append(TRADE_DATE[0][:-9])
        CLOSE_PRICE = jsonpath.jsonpath(i,"$.CLOSE_PRICE")
        list.append(CLOSE_PRICE[0])
        CHANGE_RATE = jsonpath.jsonpath(i,'$.CHANGE_RATE')
        list.append(CHANGE_RATE[0])
        TOTAL_MARKET_CAP = jsonpath.jsonpath(i,'$.TOTAL_MARKET_CAP')
        list.append(TOTAL_MARKET_CAP[0])
        df1 = pd.DataFrame(list).T
        df = pd.concat([df1,df])
        list = []

3.数据存储

将数据集反转,并添加列索引,重置行索引,之后进行保存。

df = df.iloc[::-1]
df.columns = ['数据日期','股价','当日涨跌幅(%)','总市值']
df = df.reset_index(drop = True)
print(df)
df.to_excel('.\股价数据.xlsx',index = False)

4.结果

          数据日期      股价   当日涨跌幅(%)           总市值
0   2022-10-10   251.2  -0.321416  731279085176
1   2022-10-11  255.01    1.51672   7.42371e+11
2   2022-10-12  262.34     2.8744   7.63709e+11
3   2022-10-13  258.18   -1.58573   7.51599e+11
4   2022-10-14  264.54     2.4634   7.70114e+11
..         ...     ...        ...           ...
91  2023-02-22  270.42   -1.57598   7.87231e+11
92  2023-02-23  270.44  0.0073959   7.87289e+11
93  2023-02-24  267.58   -1.05754   7.78964e+11
94  2023-02-27  259.81    -2.9038   7.56344e+11
95  2023-02-28   260.8   0.381048  759226056584

4.代码汇总

import requests
import jsonpath
import json
import re
import pandas as pd

url = 'https://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery112305522640988534238_1680571452074&reportName=RPT_VALUEANALYSIS_DET&columns=ALL&quoteColumns=&pageNumber=1&pageSize=5000&sortColumns=TRADE_DATE&sortTypes=1&source=WEB&client=WEB&filter=(SECURITY_CODE=%22002594%22)&_=1680571452075'
headers={'referer':r'https://data.eastmoney.com/',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.62'}

rsp = requests.get(url=url,headers=headers)
rsp_sub = re.sub('^jQuery112305522640988534238_1680571452074\(', '', rsp.text)
rsp_sub_2 = re.sub('\);', '', rsp_sub)
rsp_json = json.loads(rsp_sub_2)

list = []
df = pd.DataFrame(list).T
for i in jsonpath.jsonpath(rsp_json,'$..data')[0]:
    TRADE_DATE = jsonpath.jsonpath(i,'$.TRADE_DATE')
    if TRADE_DATE[0] < '2022-10-10' or TRADE_DATE[0] > '2023-02-29':
        pass
    else:
        list.append(TRADE_DATE[0][:-9])
        CLOSE_PRICE = jsonpath.jsonpath(i,"$.CLOSE_PRICE")
        list.append(CLOSE_PRICE[0])
        CHANGE_RATE = jsonpath.jsonpath(i,'$.CHANGE_RATE')
        list.append(CHANGE_RATE[0])
        TOTAL_MARKET_CAP = jsonpath.jsonpath(i,'$.TOTAL_MARKET_CAP')
        list.append(TOTAL_MARKET_CAP[0])
        df1 = pd.DataFrame(list).T
        df = pd.concat([df1,df])
        list = []

df = df.iloc[::-1]
df.columns = ['数据日期','股价','当日涨跌幅(%)','总市值']
df = df.reset_index(drop = True)
print(df)
# df.to_excel('.\股价数据.xlsx',index = False)



简单分析

在这里插入图片描述
股价方面,特斯拉宣布降价后的几天,对比亚迪的股价短时间造成了一定的冲击,10月28日一度达到2022年末两个月的最低点,但之后又开始回暖,次月4号达到了最高值,280.2元,11月份持续下跌,12月回升后趋于平稳,短期内有一定的明显变化。
在这里插入图片描述
从整体上看,10月份到11月初经历了触底反弹,11月整体下跌,12月回升后稳定维持之前的水平,可以说是迅速做出了调整,知道2023年1月底到2月初可能由于某些原因又创了一次股价新高,之后回调,可以看到始终在一定的水平上涨跌,时间越长越越趋于稳定,若从股价上可以说,此次降价对比亚迪的股价没有造成太大影响。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个基本的Python爬虫代码,可以用来爬取汽车之家比亚迪销售数据: ```python import requests from bs4 import BeautifulSoup # 设置请求头信息,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 比亚迪汽车之家销售数据页面链接 url = 'https://price.autohome.com.cn/sales/byd-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0/' # 发送HTTP请求 response = requests.get(url, headers=headers) # 解析HTML页面 soup = BeautifulSoup(response.content, 'html.parser') # 获取车型、价格和销量数据 car_models = soup.select('.list-cont .list-cont-bg a') prices = soup.select('.list-cont .list-cont-bg .font-size-20') sales = soup.select('.list-cont .list-cont-bg .font-size-20+ p') # 打印结果 for i in range(len(car_models)): print('车型:', car_models[i].text.strip()) print('价格:', prices[i].text.strip()) print('销量:', sales[i].text.strip()) print('-----------------------') ``` 这段代码使用了Python中的requests库和BeautifulSoup库来发送HTTP请求并解析HTML页面。具体的实现步骤如下: 1. 设置请求头信息,模拟浏览器访问; 2. 构造目标URL链接; 3. 发送HTTP请求,获取页面内容; 4. 解析HTML页面,使用BeautifulSoup库提取车型、价格和销量数据; 5. 打印结果。 请注意,爬虫的使用需要注意法律法规,不要违反相关规定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值