【Day 17】- 手动更新汇率太麻烦了! 汇率爬虫搭配 OpenPyXL 做到自动读取&更新汇率!

前情提要

前一篇介绍了 openpyxl 这项可以操作 excel 的工具。

开始之前

本篇实战 【Day 15】- 汇率什麽的。爬! (实战汇率爬虫 on chrome) 所撰写的汇率爬虫 使用openpyxl 将汇率更新在 excel。

预期结果

可以简单地将想要爬取的汇率写在 excel ,执行程序後自动将爬取到的汇率更新在 excel 上。

实作

首先,先从 excel 下手,先将目标 excel 读入,并读取目前 row 的最大值。

import openpyxl

workbook = openpyxl.load_workbook('汇率及时更新.xlsx')
sheet = workbook['及时汇率']
mxR = sheet.max_row
print(mxR)
#Output : 4

接下来,读取 row = 2~mxR, column = 1 的单元格,并将其加入一串列。

import openpyxl

workbook = openpyxl.load_workbook('汇率及时更新.xlsx')
sheet = workbook['及时汇率']
mxR = sheet.max_row
cointypes = []
for r in range(2, mxR+1):
    cointype = sheet.cell(row=r, column=1).value
    cointypes.append(cointype)

print(cointypes)
#Output: ['美金', '日币', '欧元']

读取表单部分完工後,我们将汇率爬虫与此结合,并将汇率爬虫包为一个函式,以币种作为输入、汇率作为回传值。

import openpyxl
import requests
from bs4 import BeautifulSoup

def crawler(cointype):
    url = f'https://www.google.com/search?q={cointype}'
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
    resp = requests.get(url, headers={
        'user-agent': user_agent
    })
    soup = BeautifulSoup(resp.text, 'html5lib')
    ele = soup.find('span', class_='DFlfde SwHCTb')

    if ele:
        return ele.text
    else:
        return None

workbook = openpyxl.load_workbook('汇率及时更新.xlsx')
sheet = workbook['及时汇率']
mxR = sheet.max_row
cointypes = []
for r in range(2, mxR+1):
    cointype = sheet.cell(row=r, column=1).value
    cointypes.append(cointype)

接下来,我们简单写个 for-loop 将 cointypes 内的每个元素都呼叫一次汇率爬虫,并将结果用 openpyxl 存於 excel,最後储存 excel 即可。

记得执行该程序的过程,需先将目标 excel 档案先关闭,否则会出现错误。

import openpyxl
import requests
from bs4 import BeautifulSoup

def crawler(cointype):
    url = f'https://www.google.com/search?q={cointype}'
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36'
    resp = requests.get(url, headers={
        'user-agent': user_agent
    })
    soup = BeautifulSoup(resp.text, 'html5lib')
    ele = soup.find('span', class_='DFlfde SwHCTb')

    if ele:
        return ele.text
    else:
        return None

workbook = openpyxl.load_workbook('汇率及时更新.xlsx')
sheet = workbook['及时汇率']
mxR = sheet.max_row
cointypes = []
for r in range(2, mxR+1):
    cointype = sheet.cell(row=r, column=1).value
    cointypes.append(cointype)

nowrow = 2
for cointype in cointypes:
    result = crawler(cointype)
    sheet.cell(row=nowrow, column=2).value = result
    nowrow += 1

workbook.save('汇率及时更新.xlsx')

结语

今天带各位实作用 openpyxl 套件,将汇率爬虫爬取回来的资料更新到 excel 上,这个操作 excel 的方法也可用於很多地方,像是学校消警告时老师指派的工作(X。

明日内容

明天会跟各位介绍 selenium 这个套件,这个套件对於爬取动态网页设计的网站十分方便。

补充资料

openpyxl Docs : https://openpyxl.readthedocs.io/en/stable/

[2020铁人赛Day16]糊里糊涂Python就上手-Python Excel 操纵套餐(使用openpyxl) : https://ithelp.ithome.com.tw/articles/10246377

OpenPyXL的使用教程(一) : https://www.jianshu.com/p/642456aa93e2


<<:  Day 17:Next 布景客制化 - 将 Social Link 移到主选单

>>:  Hook 的规则 ( Day18 )

Day5-TypeScript(TS)宣告

今天要进入程序码的部分了。 我会以JavaScript(JS)为基础做比较与解释, 同时也了解两者在...

javascript基础功能2

现在要来学习如何制作一个表格,并且对其文字粗细加工,还有边框的变换以及表格的样式改变。 首先我们先打...

tkinter 实现台湾类股抽签程序

# -*- coding: utf-8 -*- import tkinter as tk impor...

IOS、Python自学心得30天 Day-29 连接Firebase辨识

前言: 衔接完成 程序码: // // ViewController.swift // Dog Br...

WebRTC之旅:终

转眼间,三十天过去了~ 在这些日子中,练习写文章,练习自主学习的步调,练习整理思绪,学习新知......