1、爬取网站table 中的信息 存入二维数组
2、把二维数组中的信息存入到excel表中
3、读取数组中的信息生成折线图
代码如下:
#demo1
import urllib.request
from bs4 import BeautifulSoup
import xlwings as xw
import matplotlib.pyplot as plt
#支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#打开中国银行的网址
htm = urllib.request.urlopen('https://www.bankofchina.com/sourcedb/whpj/')
wb = xw.Book("demo.xlsx") #建立excel表连接
sht = wb.sheets["sheet1"] #实例化工作表对象
# 200表示成功了
# print(htm.getcode())
# print (len(htm.read()))
print("==============")
#解析网页
soup = BeautifulSoup(htm, "html.parser", from_encoding="utf-8")
link_node = soup.find_all('table')
link_node = link_node[1].find_all('tr')
# print(len(link_node[1])) // 有问题,不符合范围
link_ary = []
for i in range(len(link_node)):
col = []
for j in range(8):
col.append(0)
link_ary.append(col)
#把读取的网页表格中的信息存入到二维数组
for i in range(len(link_node)):
for j in range(8):
if i == 0:
#存入到excel的方式,编码方式可能会出问题
# sht.range(str(chr(65 + j)) + '1').value = link_node[i].find_all('th')[j].text
link_ary[i][j] = link_node[i].find_all('th')[j].text
else:
if link_node[i].find_all('td')[j].text == '':
link_ary[i][j] = '0'
else:
link_ary[i][j] = link_node[i].find_all('td')[j].text
print('成功爬取数据')
#把数组的数据存入到excel
sht.range('A1').expand('table').value = link_ary
#读取excel(二维数组) 数据生成折线图
# print(sht.range('A1:B2').value)
plt.xlabel('(银行外汇牌价)')
plt.ylabel('(货币名称)')
for i in range(1,len(link_ary)):
x = [1,3,5,7,9] #控制距离
y = []
for j in range(1, 6): #注意下标
y.append(float(link_ary[i][j]))
plt.plot(x, y, label='y ='+link_ary[i][0]) #标签没显示成功
#坐标值修改为文字
ary = ['现汇买入价','现钞买入价','现汇卖出价','现钞卖出价','中行折算价']
plt.xticks(x, ary)
plt.show()
print('折线图生成成功')
出现的问题和解决方法:
1、python如何获取标签中的内容
2、int 转换 字符的问题(invalid literal for int() with base 10)
3、图形坐标值如何改为文字
另一篇
4、绘制折线图
5、与excel 的交互 xlwing