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

简说Python

共 2926字,需浏览 6分钟

 ·

2021-04-13 22:20


↑↑↑关注后"星标"简说Python

人人都可以简单入门Python、爬虫、数据分析
 简说Python推荐 
来源:志斌的python笔记
作者:志斌

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


页面分析

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

首先我们按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'),
)


获取数据

上面我们已经将网页的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)


数据存储

在之前的文章中,我们关于数据存储的各种方式已经介绍的很清楚了(如果有朋友不懂可以看这篇文章一文教会你,爬虫数据如何存储),这里我们就不在过多介绍了,此次才用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. 后台回复【股票】即可获取源代码。

最后给大家分享《100本Python电子书》,包括Python编程技巧、数据分析、爬虫、Web开发、机器学习、深度学习。
现在免费分享出来,有需要的读者可以下载学习,在下面的公众号「程序员狮子里回复关键字Python,就行
-END-

扫下方二维码添加我的私人微信,可以在我的朋友圈获取最新的Python学习资料,以及近期推文中的源码或者其他资源,另外不定期开放学习交流群,以及朋友圈福利(送书、红包、学习资源等)。

扫码查看我朋友圈

获取最新学习资源


学习更多:
整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了

点赞”传统美德不能丢 

浏览 88
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报