本次主要爬取东方财富网关于“大盘资金流向历史数据”的数据
根据日期及流入资金数据绘制折线图,尝试使用XHR或者bs抓取数据,无奈失败且比较麻烦,采用了selenium抓取的方法。
并使用xpath获取网页中的表格数据,需要提前安装谷歌浏览器及相关程序
from selenium import webdriver #导入模块
import time
import csv #存储数据
from lxml import etree
option = webdriver.ChromeOptions() #网址获取
option.add_argument('headless') #设置浏览器静默
driver = webdriver.Chrome(options=option)
driver.get('http://data.eastmoney.com/zjlx/zs399006.html')
time.sleep(2)
source = driver.page_source
mytree = etree.HTML(source)
tables = mytree.xpath("//table[@class='tab1']")#定位表格,返回列表
for i in range(len(tables)):#循环表格
onetable = []
trs = tables[i].xpath('.//tr')#取出所有tr标签
for tr in trs:
ui = []
for td in tr:
texts = td.xpath(".//text()")#取出所有td标签下的文本
mm = []
for text in texts:
mm.append(text.strip(""))
ui.append(','.join(mm))
onetable.append(ui)#整张表格
with open('stock.csv', 'a', newline='') as file:
csv_file = csv.writer(file)
for i in onetable:
csv_file.writerow(i)
time.sleep(2)
driver.close()
刚开始不太会爬取表格,bs获取的数据不全,看了某位大神参考代码才写出来,原文链接忘了,勿怪勿怪
这样的爬取的数据是比较乱的,如图所示
前两行数据存在问题,且数据中存在万 亿等数字,无法作图使用,可以使用pandas去除转换,但技术较浅且数据量不多,直接使用excel进行处理了,处理结果如图所示
接下来就是使用matplotlib进行绘图了。
matplotlib绘图自由度很高,意味着只要你会几乎可以做出任何想要的形状,同时也意味着你需要知道许多使用方法。
from matplotlib import pyplot as plt #引入模块
import numpy as np
import pandas as pd
data = pd.read_csv('shanghai_stock_market.csv', encoding='gb2312') #读取文件
font1 = {'family': 'FangSong', #字体设置
'weight': 'normal',
'size': 30,
}
font2 = {'family': 'Times New Roman',
'weight': 'normal',
'size': 30,
}
x = data['日期'].iloc[::-1] #日期反转及坐标轴数据获取
y1 = data['主力净流入']
y2 = data['超大单净流入']
y3 = data['大单净流入']
y4 = data['中单净流入']
y5 = data['小单净流入']
plt.figure(figsize=(40, 10), dpi=100) #设置图大小并绘图
plt.plot(x, y1, label='主力净流入', linewidth=5)
plt.plot(x, y2, label='超大单净流入', linewidth=5)
plt.plot(x, y3, label='大单净流入', linewidth=5)
plt.plot(x, y4, label='中单净流入', linewidth=5)
plt.plot(x, y5, label='小单净流入', linewidth=5)
y_yticks = np.arange(-500, 400, 100) #坐标轴标签
plt.xticks(x[::6])
plt.yticks(y_yticks, [i for i in range(-500, 400, 100)])
plt.tick_params(labelsize=16) #坐标轴标签大小设置
plt.xlabel('日期', font1) #坐标轴说明及标题设置
plt.ylabel('净流入数据', font1)
plt.title('大盘资金流向历史数据(沪市)', font1) #标题
plt.axhline(data['主力净流入'].min(), linewidth=5) #参考线绘制
plt.axhline(data['超大单净流入'].min(), linewidth=5)
plt.axhline(data['大单净流入'].min(), linewidth=5)
plt.axhline(data['小单净流入'].min(), linewidth=5)
plt.legend(prop=font1) #图例设置
plt.savefig('沪市.jpg')#保存图片
plt.show() #展示
需要注意很多的小细节问题,找了好多零碎资料才有的下图