各位早安,今天是第24天,但其实爬虫的技巧大致上已经教得差不多了,而且我猜会看我的文章的人,应该都想知道爬虫还可以做哪些应用吧,所以我想铁人赛的最後几天,就来做点有趣的专案,顺便介绍一些方便的工具给各位~
说到爬虫,股市价格几乎是最常见的应用了,虽然爬虫可以帮你省下很多时间,但抓下来的资料往往是一大堆数字,让人看得头昏眼花,这时如果将资料画成图表的话,股价的趋势就可以一目了然了。
那麽,我们就来绘制股市趋势图吧!
首先,资料来源是台湾证券交易所的个股日成交资讯,选择年份月份和股票代码後按查询,底下就会出现该股票当月的成交资讯了。我们发现载入时网站并没有重新刷新,所以这应该也和昨天的KKBOX一样,用AJAX技术载入资料。
打开F12>>Network并重新查询一次,果不其然被我们找到传递资料的API了,名称为STOCK_DAY?response=json...
。
小诀窍:
在寻找API时,只筛选Fetch/XHR,可以大幅缩减要寻找的范围。
其实这个API的参数很单纯,date表示某年月份的股市资料,stockNo则表示股票代码。
因为9月还没过完,为了资料的完整性,我就挑2021年8月作为例子,股票代码就随便挑一个 元大台湾50(0050)。
跟昨天一样抓取资料:
# 台湾证券交易所,个股日成交资讯
url = "https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=json&date=20210801&stockNo=0050"
# 取得股票资料json字串
response = requests.get(url)
print(response.text)
日期至少要在当月之前,不然会回传这个讯息:
{"stat":"查询日期大於今日,请重新查询!"}
股票代码也要是真实存在的,不然会回传这个讯息:
{"stat":"很抱歉,没有符合条件的资料!"}
正确情况下,回传的资料为json格式的字串,一样使用json.loads()
转成python可用的型态。且待会要用到data
和field
这两个资料。
# 从json字串转为python的字典格式
json_data = json.loads(response.text)
datas = json_data["data"]
fields = json_data["fields"]
说到Pandas,你第一个会联想到什麽?
...foodpanda吗? 我看你是饿了吧XD
Pandas是Python的一个支援数据操纵和分析的套件,它的名字衍生自术语「面板数据」(panel data)。Pandas使用特别的资料结构DataFrame储存资料,并支援多种格式的汇入与汇出,高度的优化让Pandas在处理数据上非常快速,因此经常在资料探勘(Data Mining)和机器学习(Machine Learning)领域中使用。
现在我们就要将刚才抓到的股市资料存成Pandas的DataFrame,并汇出成csv档。其实要存成csv档也可以用昨天教的csv writer,但我想说改教点新的东西,让大家了解更多Python实用的套件,对大家来说也比较好。
你可能会想说:「为什麽要储存下来,每次程序都从API抓资料不就好了吗?」
会储存下来有三种考量:
那要怎麽将资料转成DataFrame呢?
# 存成Pandas的Dataframe
df = pd.DataFrame(datas, columns=fields)
print(df)
你没看错,就是这麽简单!
因为资料本身就是由List组成的二维阵列,而columns代表横的栏位,fields
原本就排好了,所以直接当建构元的参数就好。
印出来大概是这样,会发现其实已经有点像CSV的格式了。
Pandas有个超赞的优点不得不说,只要将资料整理成DataFrame,只要使用一个函数,就能将资料汇出,而且还支援多种格式,是不是超方便的呢!!
底下示范将资料存成.csv
档,excel用的.xlsx
档,以及网页的.html
档。另外也支援.json
和.sqlite
档。
# 转成csv档
df.to_csv("./month_stock.csv", encoding="big5")
# 转成xlsx档
df.to_excel("./month_stock.xlsx", encoding="big5")
# 转成html档
df.to_html("./month_stock.html")
结果:
.csv
.xlsx
.html
今天是股市趋势图的第一天,进度从台湾证券交易所取得单月股市资料,并将资料转成Pandas的DataFrame,最後汇出成档案! 明天没意外应该会来讲怎麽取得整年的资料,我们明天再见~
如果喜欢这系列文章麻烦帮我按Like加订阅,你的支持是我创作最大的动力~
本系列文章以及范例程序码都同步更新在GitHub上,後续会持续的更新,如果喜欢也麻烦帮我按个星星吧~
有任何问题或建议,都欢迎在底下留言区提出,还请大家多多指教。
做好了指标的收集,接下来还有一个很重要的步骤 --- 数据的视觉化,关於这方面的功能虽然 Prome...
[Day29] Whack A Mole Game 打地鼠 需要用到的技巧与练习目标 const s...
继昨天完成SideDrawer等,今天要来呈现HomeScreen&ProductScree...
图片来源:*https://www.dcard.tw/f/funny/p/225385728 大家...
今天我们接续昨天的话题继续来聊聊AI在音乐领域上除了作曲以外的各方面应用。 谱面辨识/采谱系统 这边...