爬取工商银行黄金白银价格并可视化
爬取工商银行黄金白银价格并可视化
目标网址:http://www.icbc.com.cn/icbc/%e7%bd%91%e4%b8%8a%e9%bb%84%e9%87%91/%e8%b4%b5%e9%87%91%e5%b1%9e%e8%b5%84%e8%ae%af/%e5%b8%82%e5%9c%ba%e5%bf%ab%e6%8a%a5/%e5%b7%a5%e8%a1%8c%e9%87%91%e8%9e%8d%e5%b8%82%e5%9c%ba%e8%b4%b5%e9%87%91%e5%b1%9e%e5%b8%82%e5%9c%ba%e6%af%8f%e6%97%a5%e6%a6%82%e8%a7%8820210630.htm
from bs4 import BeautifulSoup # 网页解析,获取数据
from pylab import * #绘制折线图
import re # 正则表达式,进行文字匹配`
import urllib.request, urllib.error # 制定URL,获取网页数据
import matplotlib.pylab as pyl
import numpy as npdata0 = []
data1 = []
data2 = []
def main():for i in range(5,13):for j in range(1,32):url = "http://www.icbc.com.cn/icbc/%e7%bd%91%e4%b8%8a%e9%bb%84%e9%87%91/%e8%b4%b5%e9%87%91%e5%b1%9e%e8%b5%84%e8%ae%af/%e5%b8%82%e5%9c%ba%e5%bf%ab%e6%8a%a5/%e5%b7%a5%e8%a1%8c%e9%87%91%e8%9e%8d%e5%b8%82%e5%9c%ba%e8%b4%b5%e9%87%91%e5%b1%9e%e5%b8%82%e5%" \"9c%ba%e6%af%8f%e6%97%a5%e6%a6%82%e8%a7%882020{}{}"".htm".format( str(i).rjust(2,'0'),str(j).rjust(2,'0'))link2,link0,link1 = getData(url) # 8.27 8.6 8.4 # 7.27 这几天的爬取的数据有误,手动修改if i == 8 and j == 28:link1 = ['27.05']if i == 7 and j ==28:link0 = ['1941.88']if i ==8 and j == 5:link1 = ['26.00']if i == 8 and j == 7:link1 = ['28.94']print(link1)data0.extend(link0) # 存黄金data1.extend(link1) # 存白银data2.extend(link2) # 存日期print(data0)print(data1)print(data2)# print(len(data0))# print(len(data1))# print(len(data2))draw(data0,data1)
# 爬取网页
def getData(url):data = [] #用来存储爬取的网页信息html = askURL(url) # 保存获取到的网页源码# 2.逐一解析数据soup = BeautifulSoup(html, "html.parser")data = soup.find_all('span', id='MyFreeTemplateUserControl') # 查找符合要求的字符串item = str(data)link0 = re.findall(r"黄金价格.*,收于(.*)美元/盎司;", item)link1 = re.findall(r"白银价格.*,收于(.*)美元/盎司", item)link2 = re.findall(r"[(]([0-9]*月[0-9]*日)[)]", item)print(link2)print(link0)return link2,link0,link1def askURL(url):head = { # 模拟浏览器头部信息,向服务器发送消息"User-Agent": "T 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122 Safari / 537.36"}request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return htmldef draw(data0,data1):sb = map(eval, data0) # 将字符列表转化为数字列表data0 = list(sb)nt = map(eval, data1)data1 = list(nt)plt.rcParams['font.family'] = 'MicroSoft YaHei' # 设置字体,默认字体显示不了中文fig = plt.figure()ax = fig.add_subplot(111)plt.xlim((0, 10)) # 设置x轴刻度范围plt.xticks(range(0, len(data0), 1), data2, rotation=(len(data0))) # 设置x轴刻度plt.title("黄金/白银走势(美元/盎司)") # 设置图表标题plt.xlabel('时间') # x轴标题ax.plot(data2, data0, '-', label='黄金')ax2 = ax.twinx()ax2.plot(data2, data1, '-r', label='白银')fig.legend(loc=1, bbox_to_anchor=(1, 1), bbox_transform=ax.transAxes)pyl.show()if __name__ == "__main__": # 当程序执行时main()
可视化截图如下

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
