【爬虫】爬取中国银行货币信息存入excel并生成折线图

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值