今天跟大家伙儿聊聊我这几天搞的“凤凰网股票”那点事儿。一开始也没想搞这么复杂,就是手痒痒,想看看能不能把凤凰网上的股票数据扒下来,自己分析分析。
我寻思这还不简单?打开凤凰网财经的股票页面,右键“检查”,看看有没有什么API接口可以直接调用。结果,HTML结构倒是挺清晰,但要直接从HTML里提取数据,那也太费劲了,容易出错不说,人家网页一改版,我这代码就得跟着重写。
所以我就琢磨着,有没有更靠谱的路子。然后就想到了用Python的requests库模拟HTTP请求,再用BeautifulSoup或者lxml解析HTML。这套路我熟,以前爬过不少网站,驾轻就熟。
说干就干,先安装必要的库:
pip install requests
pip install beautifulsoup4
然后就开始写代码。先用*()获取网页内容,然后用BeautifulSoup解析。代码大概是这样:
import requests
from bs4 import BeautifulSoup
url = '凤凰网股票页面的URL' # 替换成真实的URL
response = *(url)
* = 'utf-8' # 解决中文乱码问题

soup = BeautifulSoup(*, '*')
# 接下来就是从soup里提取数据了...
提取数据这部分,就得仔细分析网页的HTML结构了。我发现凤凰网的股票数据是用table标签组织的,所以我就用BeautifulSoup的find_all()方法找到所有的table,然后再遍历每个table,提取里面的tr和td标签的内容。这部分代码比较繁琐,就不贴了,反正就是各种find()和find_all()。
搞了半天,总算把数据提取出来了,但是问题来了,提取出来的数据乱七八糟的,各种空格、换行符,还有一些没用的标签。还得对数据进行清洗。
清洗数据这部分,我用了正则表达式。把一些没用的字符替换掉,然后把字符串转换成数字。这部分也挺麻烦的,得耐心调试,确保数据干净。
数据清洗干净了,接下来就是存储数据了。我选择把数据存储到CSV文件里,方便以后分析。用Python的csv库可以很方便地写入CSV文件。代码如下:
import csv
# data是清洗后的数据列表
with open('凤凰网股票数据.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = *(csvfile)

# 写入表头
*(['股票代码', '股票名称', '最新价', '涨跌幅', ...]) # 替换成真实的表头
# 写入数据
*(data)
到这里,基本的功能就实现了。但是,我发现一个问题,凤凰网的股票数据是动态加载的,也就是说,第一次加载网页的时候,只显示一部分数据,然后通过JavaScript动态加载更多数据。这样的话,我只能爬取到第一页的数据,后面的数据就爬不到了。
为了解决这个问题,我研究了一下凤凰网的JavaScript代码,发现它是通过AJAX请求获取数据的。然后,我就用Chrome的开发者工具抓包,找到了AJAX请求的URL。我就修改我的Python代码,直接向AJAX请求的URL发送请求,获取JSON数据。这部分代码就不贴了,反正就是用*()发送请求,然后用*()解析JSON数据。
搞了几天,总算把凤凰网的股票数据全部爬下来了。就可以用这些数据做一些分析了。比如说,可以统计一下涨幅最高的股票,或者分析一下股票的走势。不过这些都是后话了,今天就先分享到这里。
这回实践主要用到了以下技术:
- Python
- requests
- BeautifulSoup
- 正则表达式
- csv
这回实践还是挺有意思的,学到了不少东西。以后有时间,再跟大家分享我用这些数据做的分析。
还没有评论,来说两句吧...