定向爬取股票数据——记录一次爬虫实战

时间:2024-04-09 12:13:48

今天是八月2号,自学python爬虫已经一整个月了。不学不理解,真正学了才发现,python不愧是一门博大精深的高级编程语言,我学到现在也才只见识到它冰山一脚,python应用的范围即便相比于c、c++、java等老牌语言也不逞多让;爬虫只是它庞大功能体系的一种,而我一个月来的学习单论爬虫这一块来说也只能说堪堪入门,距离熟练使用再到掌握还有很遥远的路程。

虽然爬虫的路途依旧遥远,但一个月的努力也不可能白费,想起来还没有尝试过股票数据的抓取,为了检测进度,也算打磨打磨暑期时间,just do it!

既然要爬取网站的股票信息,那就要选好目标网站,根据网络爬虫的robots协议的协定和大站优先的爬虫策略,在观察了多家股票大头网站后,我最终选定了——‘东方财富网’进行数据爬取,该网站robots.txt文件信息如下
定向爬取股票数据——记录一次爬虫实战

可以看见,该网站允许所有搜索引擎按照robots协议合理的抓取网站中的所有文件、目录。那么我就可以放心大胆的进行爬虫了!

进入该网站找到沪深A股所有个股的列表界面,方便爬虫爬取信息
定向爬取股票数据——记录一次爬虫实战

打开开发者工具进行数据定位发现html源码中并没有我想要的股票信息,由此可以知道这个网站使用了js异步加载。那我平时最常用的requests库是肯定没办法爬的,我第一时间想到的是使用network进行抓包分析和selenium+chromedriver无头模式这两种方式

我首先尝试了抓包分析js代码来找到股票信息数据或url,在network找可疑的js代码块,发现有这两条比较可疑的js代码
定向爬取股票数据——记录一次爬虫实战

复制这两个js代码的请求头链接进入后找到这个
定向爬取股票数据——记录一次爬虫实战

已经出现了该页面的表头介绍,如下图。本以为真实链接呼之欲出,再仔细一看发现href字段有一些奇奇怪怪的字符,还有f1,f2,f3…奇怪的fields字段,看来网站对他们的数据加密措施实施地很到位嘛,,,,毫无头绪、无计可施、知识盲区,抓包方式失败!
定向爬取股票数据——记录一次爬虫实战

条条大路通罗马,既然抓包这条路走不通,那就换一条路——上selenium加谷歌无头浏览器这一大杀器,selenium在爬虫中可谓无往不利,只要浏览器用户可以在客户端使用浏览器能够浏览的网页它都能爬,完美解决js动态加载页面的问题,缺点就是爬虫效率不高且对于流浪党很不友好。因为selenium是一款自动化监测工具,极大程度模拟人的浏览网页的动作,每个页面每个版块都要加载,相比于requests效率不足且耗费流量。但这些都并不重要,用python写爬虫本就不是为了它的时间效率,而是图个简洁图个方便。

首先导入相关库,设置Chrome的无头参数:
定向爬取股票数据——记录一次爬虫实战

因为个股信息量比较大,使用单线程同步运行的方式速度很慢,于是我还用到了替换threading多线程库加大爬虫效率,为了使爬虫爬取的数据便于统计观察导入了xlwt模块将信息写入excel表格中并保存本地(下图为在主函数设置必要参数,创造线程)
定向爬取股票数据——记录一次爬虫实战

还差最重要的一步:设计一个进行url请求、元素定位、数据存储的主要函数(此处因为博主突发懒癌而将这些功能全套在了一个getStockInfo函数里)

核心代码完,至此爬虫已经完成,看看最终实现效果(跪求没有bug!跪求没有bug!!跪求没有bug!!!):
定向爬取股票数据——记录一次爬虫实战
定向爬取股票数据——记录一次爬虫实战

大获成功,ye!!

数据已经成功爬取,不过还有很多地方需要完善,之后我还会引入python的定时任务调度器,每天收盘时刻准时爬取当天股票最新信息,这样就可以足不出户每天坐收行情信息了,权当是一种菜鸡码手无聊之余的乐趣