こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
【RPAツール概要】Webトレンド情報収集・レポート自動作成

本記事では、Web上での情報収集を行なった後、Excelレポート作成に至るまでの作業プロセスを自動することを目的としたツールの作成方法について解説します。
例として、ニュースサイト情報を収集し、Excelファイル形式のレポートを出力するツールをご紹介します。
以下の30秒動画でもRPAツールの概要を詳しく紹介しています。
主要技術としては、主にWebスクレイピングとExcelレポーティングの2つを用いています。
【Python】Webスクレイピング

Webスクレイピング(Web Scraping)とは、WebサイトのHTMLからデータを抽出する技術を指します。スクレイピングをもとに、短時間で大量のWebデータ収集が実現できます。
Webスクレイピングについてもっと詳しく知りたい方向けにこちらの記事も配信しています。
【Web情報解析の自動化】「Webスクレイピングとは」概要や法律課題まで徹底解説
Webサイト上のデータを収集し、企業のマーケティング活動等に活かせるスクレイピング技術。とても便利な反面、法律面での注意点がいくつかあります。本記事では、Webスクレイピングとは何か?ご紹介します。加えて、Webスクレイピングの利用用途及び法律やコンプライアンス面で注意すべき点について図解も交えて詳しくご紹介します。
【Python】Excel操作自動化・レポーティング

本記事でのExcelレポーティングとは、Pythonを用いて目的のExcelレポートを出力することを指します。
Pythonを用いてExcelを操作する方法について、どんなことができるのか詳しく知りたい方はこちらの記事をご覧下さい。
【Excel×Python操作】エクセル作業で自動化できること徹底解説・業務効率化入門
「Excel作業を自動化したいが、Excelのどんな操作をPythonで自動化できるのか分からない」本記事ではこの疑問に答えます。まず、Pythonでの操作可能範囲を示した後、具体的なExcel作業効率化事例を紹介。
【RPA】Webスクレイピングに基づくExcelレポート作成
実際にPRAツール構築に際して「プログラム構築イメージ」と「Python環境準備事項」を事前に提示します。
プログラム動作イメージ

- Web上で最新ニュース記事のタイトル・概要・記事リンクを取得
- 取得情報をデータ処理・Excelに表形式で出力
- コロナ関連記事は強調ハイライトして表示
【事前準備】Pythonライブラリのインストール
BeautifulSoup4
Webスクレイピングには、Beautiful Soup4というWebサイトを構築するHTMLやXMLを取得するPythonモジュールを用いています。インストール未済の場合は、以下コマンド入力によってインストールしておきましょう!
pip install beautifulsoup4
OpenPyXL
PythonによるExcel操作には、OpenPyXLというモジュールを用いています。インストール未済の場合は、以下コマンド入力によってインストールします。
pip install openpyxl
【参考】おすすめ教材|Pythonで作業を効率化したい方向け
Pythonを用いて面倒な作業を自動化したい方向けに、おすすめの教材をご紹介します。
【Pythonコード公開】BeautifulSoup4・OpenPyXL
下記のPythonプログラムによって本記事で紹介しているツールは動作しています。コピー&ペーストにてご利用可能です。
また、使用用途に応じてWeb情報取得対象やExcelレポート記載方法をカスタマイズすることで、多様な業務の自動化を実現するRPAツールとしても活用できるかと思われます。
import pandas as pd
from datetime import date
from pandas import Series
from bs4 import BeautifulSoup
from urllib.request import urlopen
import openpyxl
from openpyxl.styles import Font
from openpyxl.styles.borders import Border, Side
# =====================================================
# Web Scraping
# =====================================================
def get_trend():
# data
title_list = []
contents_list = []
url_list = []
# HTML
url = urlopen("https://www.nikkei.com")
html = BeautifulSoup(url, "html.parser")
# elements
get_elements = html.find_all("div", {"class":"block_bch8brg"})
for i in range(len(get_elements)):
title = get_elements[i].find("article",{"class":"card_c1g19z31"}).find_all(text = True)
titles = ""
for item in range(len(title)):
titles += title[item]
title_list.append(titles)
link = "https://www.nikkei.com/" + get_elements[i].find("article",{"class":"card_c1g19z31"}).find("a",{"class":"fauxBlockLink_fs5hi1o"}).get("href")
url_list.append(link)
# Pandas
table = pd.DataFrame()
table["Title"] = title_list
table["URL"] = url_list
return table
# =====================================================
# Excel Reporting
# =====================================================
class excel_report:
def __init__(self,file_name,sheet_name):
self.file_name = file_name
self.sheet_name = sheet_name
# Create workbook and sheet
def create_workbook_sheet(self):
name = self.file_name + ".xlsx"
workbook = openpyxl.Workbook(name)
sheet1 = workbook.create_sheet(index=0,title=self.sheet_name)
workbook.save(name)
# Edit sheet
def edit_sheet(self):
# =============================================
# select workbook & sheet
# =============================================
name = self.file_name + ".xlsx"
workbook = openpyxl.load_workbook(name)
select_sheet1 = workbook.get_sheet_by_name(self.sheet_name)
select_sheet1.sheet_properties.tabColor = '008000'
# =============================================
# Design Setting
# =============================================
# Font
font_meiryo = Font(size=14,name="Meiryo UI")
# Background
backbround = openpyxl.styles.PatternFill(patternType='solid',start_color='FFFFFF', end_color='FFFFFF')
backbround_table = openpyxl.styles.PatternFill(patternType='solid',start_color='0000CD', end_color='0000CD')
backbround_logic = openpyxl.styles.PatternFill(patternType='solid',start_color='00FFFF', end_color='00FFFF')
for i in range(50):
for j in range(200):
select_sheet1.cell(row=j+1,column=i+1).font = font_meiryo
select_sheet1.cell(row=j+1,column=i+1).fill = backbround
# Border
side = Side(style='thin', color='000000')
border = Border(top=side, bottom=side, left=side, right=side)
# Font Color
font_color = Font(size=14,color='FFFFFF')
font_color_url = Font(size=14,color="0000FF")
# Height and Width
select_sheet1.row_dimensions[1].height = 30
select_sheet1.row_dimensions[2].height = 10
select_sheet1.column_dimensions["A"].width = 3
select_sheet1.column_dimensions["B"].width = 5
select_sheet1.column_dimensions["C"].width = 16
select_sheet1.column_dimensions["D"].width = 140
select_sheet1.column_dimensions["E"].width = 8
# Marge Cell
select_sheet1.merge_cells("B1:D1")
# =============================================
# edit sheet
# =============================================
select_sheet1["B1"] = "最新ニュースまとめ"
select_sheet1["B1"].font = Font(size=18,bold=True, italic=True, color='FF0000', underline='single')
select_sheet1["B3"] = "#"
select_sheet1["C3"] = "日付"
select_sheet1["D3"] = "タイトル"
select_sheet1["E3"] = "リンク"
select_sheet1["B"+str(len(news_data)+5)] = "※コロナ関連の最新ニュースをハイライトで表示します。"
columns = ["B","C","D","E"]
for i in range(len(news_data)):
# Data
select_sheet1["B"+str(4+i)] = i + 1
select_sheet1["B"+str(4+i)] = i + 1
select_sheet1["C"+str(4+i)] = str(date.today())
select_sheet1["D"+str(4+i)] = news_data["Title"][i]
select_sheet1["E"+str(4+i)] = "GO"
select_sheet1["E"+str(4+i)].hyperlink = news_data["URL"][i]
# Design
for j in range(len(columns)):
# background
select_sheet1[columns[j] + str(3)].fill = backbround_table
# Border
select_sheet1[columns[j] + str(3+i)].border = border
select_sheet1[columns[j] + str(4+i)].border = border
# font
select_sheet1[columns[j]+str(3)].font= font_color
select_sheet1["E"+str(4+i)].font= font_color_url
# Business Logic
if ("コロナ" in select_sheet1["D"+str(4+i)].value) or ("ワクチン" in select_sheet1["D"+str(4+i)].value):
for k in range(len(columns)):
select_sheet1[columns[k]+str(4+i)].fill = backbround_logic
# save
workbook.save(name)
# =====================================================
# 実行
# =====================================================
# Execute Scraping
news_data = get_trend()
# Execute Reporting
file_name = "最新ニュース抜粋"
sheet_name = "ニュース一覧"
# create Excelfile
create = excel_report(file_name,sheet_name).create_workbook_sheet()
edit = excel_report(file_name,sheet_name).edit_sheet()
【参考】Pythonで面倒な作業を自動化!手法一挙公開中!
当サイトでは日々面倒な作業をPythonで自動化する方法を多数配信しております。日々の作業が飛躍的効率化できること間違いなしですので、以下気になった記事があれば併せてご覧ください。
【面倒なタスクをPythonで解決!】作業効率化の人気記事一覧
【参考】Pythonとは?・実現できること
最後に

お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら