python爬虫实现股票数据存储_Python 爬虫 | 股票数据的获取

本文介绍了使用Python爬虫从某方财富网抓取股票数据,并将其存储到MongoDB数据库的过程。内容包括分析网站、编写请求、提取数据和存储数据的函数,以及主函数实现数据抓取和存储。
摘要由CSDN通过智能技术生成

最近股市有了一股牛市的味道,我也来蹭波热度,这节我们将爬取股票数据,股票数据在网上很容易找到,这里以某方财富网为例

目标:

爬取股票数据并存储进数据库中(这里以MongoDB为例)

目标网站(base64编码):

aHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL2dyaWRsaXN0Lmh0bWwjaHNfYV9ib2FyZA==

目录:

1、环境

2、分析网站

3、实现功能

1、环境

Python3.7.3、requests、pymongo

2、分析网站

这里有202页、每页有20条数据

点击下一页发现url没有变化,说明数据是异步加载

打开开发者工具查看Network的请求情况

先清空请求,再点击第二、三时就会出现这些请求

点进第一个请求查看

可以很容易的知道这个就是我们要找的数据,现在我们查看一下这个数据的请求接口

第二页的url:

第三页:

可以发现url中的pn参数代表的就是页数的变化,最后面的13位数字估计就是时间戳(测试过一段时间,发现这个参数其实可以不用改)

进入这个url看看数据是怎么样的

股票有几个比较重要的数据,股票名称、股票代码、开盘价、最高价、最低价、收盘价、成交额,这不是json数据只能用正则筛选数据了

3、功能实现

步骤:

请求——提取数据——存储数据

请求函数:

def get_page(url):

"""获取网页源码"""

try:

response = requests.get(url, headers=headers)

if response.status_code == 200:

return response.text

except requests.ConnectionError as e:

print('Error', e.args)

提取数据:

def get_stock_data(text):

"""获取股票代码、名称、PE"""

com = re.compile('"f2":(?P.+?),.*?"f6":(?P.+?),.*?"f12":"(?P.+?)",.*?"f14":"(?P.+?)"'

',.*?"f15":(?P.+?),.*?"f16":(?P.+?),.*?"f17":(?P.+?),', re.S)

ret = com.finditer(text)

for i in ret:

yield {

'number': i.group('number'),

'name': i.group('name'),

'start': i.group('start'),

'max': i.group('max'),

'min': i.group('min'),

'end': i.group('end'),

'volume': i.group('volume')

}

这里的参数text为网页源码

存储函数:

def save_data(number=None, name=None, start_price=None, max_price=None, min_price=None, end_price=None, volume=None):

"""存进MongoDB"""

client = pymongo.MongoClient("localhost", 27017)

db = client.stock

collection = db.stock_data7

shijian = time.strftime('%Y-%m-%d', time.localtime()) # '2020-05-25'

data = {"time": shijian, "number": number, "name": name, "start_price": start_price, "max_price": max_price,

"min_price": min_price, "end_price": end_price, "volume": volume}

collection.insert_one(data)

主函数

不断修改url、请求、最后存入MongoDB中,参数start、end分别是起始页码和结尾页码入数据库中

def main(start=1, end=1):

for i in range(start, end+1):

url = 'http://60.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112408744624686429123_1578798932591&pn=' \

'%d&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:13,m:' \

'0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,' \

'f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1586266306109' % i

content = get_page(url=url)

data = get_stock_data(text=content)

for j in data:

number = j.get('number')

name = j.get('name')

start = j.get('start')

max_price = j.get('max')

min_price = j.get('min')

end = j.get('end')

volume = j.get('volume')

if start == '"-"':

start, max_price, min_price, end, volume = '0', '0', '0', '0', '0'

save_data(number=number, name=name, start_price=eval(start), max_price=eval(max_price),

min_price=eval(min_price), end_price=eval(end), volume=round(eval(volume) / 10 ** 8, 2))

运行结果:

虽然最近牛市的言论甚嚣尘上,但是有一点要知道股票赚到钱的总是少数人,只有不断地提升自身实力才能够不被割韭菜,股票有风险,投资需谨慎。

如果对你有帮助的话给我点个赞吧

源码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值