爬虫实战 | 爬取东方财富网股票数据

本文转载来自:公众号 志斌的python笔记

今天有个朋友说,他想做个关于股票的可视化网页,但是缺乏股票的数据,想让志斌帮他做个爬虫来每天获取数据。所以我将它写成一个实战案例,供大家一起参考学习!

1.页面分析

此次我们获取数据的网站是东方财富网!

首先我们按F12打开开发者模式,对name里面的网页进行观察,发现数据是以jQuery加载进网页的,每次加载20个数据,如图:

我们已经发现单页数据存储的方式了,现在我们来看一下各页URL之间的联系,如图:

从图中我们可以清楚的发现,每翻一页,pn的参数增加1,所以我们构建URL时,只需让params中的pn参数循环,即可批量对网页发起访问请求,代码如下:

for page in range(1,50):
   params = (
       ('cb', 'jQuery1124031167968836399784_1615878909521'),
       ('pn', str(page)),
       ('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'),
   )

2.获取数据

上面我们已经将网页的URL之间的联系和数据存储分析好了,下面我们就可以开始对数据进行获取了。

在上面对网页进行分析时,我们感觉这个网页存储数据是json格式的,其实不是,它前面多了一些脏数据,如图:

我们如果想用json来将数据进行解析的话,就必须将这些脏数据去掉。

当然我们也可以用另一种方法来解决这个问题,就是将数据转化成字符串的形式,然后用正则表达式将目标数据提取出来。代码如下:

daimas = re.findall('"f12":(.*?),',response.text)
names = re.findall('"f14":"(.*?)"',response.text)
zuixinjias = re.findall('"f2":(.*?),',response.text)
zhangdiefus = re.findall('"f3":(.*?),',response.text)
zhangdiees = re.findall('"f4":(.*?),',response.text)
chengjiaoliangs = re.findall('"f5":(.*?),',response.text)
chengjiaoes = re.findall('"f6":(.*?),',response.text)
zhenfus = re.findall('"f7":(.*?),',response.text)
zuigaos = re.findall('"f15":(.*?),',response.text)
zuidis = re.findall('"f16":(.*?),',response.text)
jinkais = re.findall('"f17":(.*?),',response.text)
zuoshous = re.findall('"f18":(.*?),',response.text)
liangbis = re.findall('"f10":(.*?),',response.text)
huanshoulvs = re.findall('"f8":(.*?),',response.text)
shiyinglvs = re.findall('"f9":(.*?),',response.text)

3.数据存储

在之前的文章中,我们关于数据存储的各种方式已经介绍的很清楚了,这里我们就不在过多介绍了,此次才用Excel文件来对数据进行存储,代码如下:

wb = openpyxl.Workbook()
sheet = wb.active
sheet['A1'] = '代码'
sheet['B1'] = '名称'
sheet['C1'] = '最新价'
sheet['D1'] = '涨跌幅'
sheet['E1'] = '涨跌额'
sheet['F1'] = '成交量'
sheet['G1'] = '成交额'
sheet['H1'] = '振幅'


for i in range(20):
   sheet.append([daimas[i],names[i],zuixinjias[i],zhangdiefus[i],zhangdiees[i],
                 chengjiaoliangs[i],chengjiaoes[i],zhenfus[i],zuigaos[i],zuidis[i],
                 jinkais[i],zuoshous[i],liangbis[i],huanshoulvs[i],shiyinglvs[i]])

让我们来看看最终效果:

总结

1. 本文详细的介绍了如何从东方财富网上批量获取股票数据,请读者仔细阅读,并加以操作。

2. 东方财富网没有反爬,但是本着友好的原则,用户在爬取时最好使用间隔爬取。

3. 本文仅供参考学习,不做商用。

4. 需要远吗,公众号回复【小助手】,找他获取,即可获取源代码。

  • 7
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值