関連するソリューション
業務改革
AI
エバンジェリスト・フェロー 玉越 元啓
- スクレイピングとは
- 今スクレイピングが注目されている理由
- Excel
- VBA
- 【参考】IEのサポート期限切れに対する対応>
- Python
- スクレイピング実行時の注意
- >最後に
スクレイピングとは
『ウェブスクレイピングとは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。通常このようなソフトウェアプログラムは低レベルのHTTPを実装することで、もしくはウェブブラウザを埋め込むことによって、WWWのコンテンツを取得する。ウェブスクレイピングはユーザーが手動で行なうこともできるが、一般的にはボットやクローラを利用した自動化プロセスを指す。』
引用:ウェブスクレイピング(Wikipedia)
今スクレイピングが注目されている理由
RPAでも同様のことが出来ますが、取得した情報の記録や編集にはExcelなどの外部のアプリケーションに頼ることになり、また、webページの見た目の変更などで動かなくなりがちです。そこで実務においては、RPAは複数のアプリケーションを動かすためのワークフロー的な役割につかい、スクレイピング処理はアプリケーションに任せる(例えばはExcelのマクロなど)ことで、自動化されたプロセスの修正範囲を限定的にする運用がよくされています。
私も、スクレイピングはPythonで行い、全体の処理を順番に実行するのはAutomatorというMacの標準ツールで行っています。
Excel
マイクロソフト ダウンロードセンター/Microsoft Power Query for Excel(外部サイト)
今回の確認は、Excel 2016で行っています。
今回は機能の確認として、テーブルがある筆者のコラムのURL(https://www.idnet.co.jp/column/page_224.html)を指定しました。
指定するページの情報量や環境によっては、数秒ほど読み込みまで時間がかかります。取得が終わると、左側に取得可能な情報のまとまりが表示されます。ここではTable 0を選択しました。右側のテーブルビューに、取得できる情報が表示されるので、間違いがないか確認して、読み込みをクリックします。
このままでは、コピーしてペーストするのと大差ありません。パワークエリ―を使う利点については次で解説します。
データタブの接続を選択
「定期的に更新する」にチェックをいれて60分、とするとファイルを開いてから60分ごとに情報が更新されるようになります。毎日1回更新すればよいのであれば、ファイルを開くときにデータを更新する、にチェックをいれてOKをクリックします。
VBA
1.マクロのエディタ画面(仮)から、参照設定を開き、次の2つのライブラリにチェックを入れ、参照可能にします。
- Microsoft Internet Controls
- Microsoft HTML Object Library
<ソースコード>
Sub WebScrapingDEMO()Dim ie As New InternetExplorerDim html As New HTMLDocumentDim tables As IHTMLElementCollectionDim table As HTMLTableDim hrow As HTMLTableRowDim hcell As HTMLTableCellDim MyCollection As New CollectionDim URL As StringDim nR, nC As LongURL = "https://www.idnet.co.jp/column/page_174.html"ie.Visible = Falseie.navigate URLRem Html読み込みまで待機DoDoEventsLoop Until ie.readyState = READYSTATE_COMPLETE '=4Set html = ie.documentSet tables = html.getElementsByTagName("table")nR = 0For Each table In tablesFor Each hrow In table.RowsnR = nR + 1nC = 0For Each hcell In hrow.CellsnC = nC + 1Cells(nR, nC).Value = hcell.innerTextNextNextNextMsgBox "Done!"End Sub
ポイント解説
Dim ie As New InternetExplorer
Internet Explorer をCOMオブジェクトとしてインスタンス化(起動)します。この "ie" でWebの操作を行っていくことになります。
ie.navigate URL
これで指定したURLに遷移し、
DoDoEventsLoop Until ie.readyState = READYSTATE_COMPLETE '=4
ページの読み込みまで待機します。
Set tables = html.getElementsByTagName("table")
ページ内のテーブルタグの情報を抽出しています。HTMLのテーブル内の情報が行単位で記述されています。この後のループの中で、1行ずつ読み込み、各行のセル内の情報を順番に取得してシートに転記しています。
改良のポイント
HTMLDocument(ソース内では変数html)は、HTMLの情報を取得するためのメソッドが幾つか用意されています。例えば他のtagや特定のclass名をもつタグ内の情報を取得することができます。下では特定のクラスが指定されている情報を取得しています。
Set tables = html.getElementsByClassName("sampleClassNamse").Item
【参考】IEのサポート期限切れに対する対応
Internet Explorer 11 desktop app retirement FAQ(外部サイト)
原文
"I ran into issues with my application which utilizes IE through automation. Will this be fixed? (Updated: May 25, 2022)
These IE COM objects have been restored to their original functionality as of the Windows 11 November 2021 "C" update and the Windows 10 February 2022 "B" update (for versions 1809 and later). The COM scenarios will also continue to work after the IE11 desktop application is disabled after June 15, 2022. "
抄訳
IE COMオブジェクトは、Windows11の2021年11月の「C」更新プログラムおよびWindows10の2022年2月の「B」更新プログラム (バージョン 1809 以降) の時点で、元の機能に復元されました。COM シナリオは、IE11 デスクトップ アプリケーションが 2022年 6月15日以降に無効になった後も引き続き機能します。
■Python
今回は弊社コラムのテーマ一覧を作成してみたいと思います。コラムのページを開いてみると、テーマは「2022年度の人工知能学会からみるAIトレンド ~今後の活用の可能性~」とあります。
2022年度人工知能学会からみるAIトレンド ~今後の活用の可能性~
ページのHTMLソースをみてみます。
テーマは、
<li class="breadcrumb-item active" aria-current="page">2022年度人工知能学会からみるAIトレンド ~今後の活用の可能性~に記載されているので、liタグのうち、classが "breadcrumb-item active" の内容を抽出すればよさそうです。
import timeimport requestsfrom bs4 import BeautifulSoupurllists =["https://www.idnet.co.jp/column/page_232.html","https://www.idnet.co.jp/column/page_198.html","https://www.idnet.co.jp/column/page_224.html"]for url in urllists:print(url)response = requests.get(url)html_doc = response.textsoup = BeautifulSoup(html_doc, 'html.parser')titles = []real_title_tags = soup.find_all('li',{'class':'breadcrumb-item active'})for tag in real_title_tags:titles.append(tag.text)print(titles)time.sleep(10)
https://www.idnet.co.jp/column/page_232.html
['今さら聞けないコンテナ管理の新常識\u3000「Kubernetes(k8s)/OpenShift」']
https://www.idnet.co.jp/column/page_198.html
['技術発展に避けて通れないAIの「標準化」とは?']
https://www.idnet.co.jp/column/page_224.html
['2022年度人工知能学会からみるAIトレンド ~今後の活用の可能性~']
まずは、使用しているライブラリについてです。
import timeimport requestsfrom bs4 import BeautifulSoup
"requests"は、pythonでウェブアクセスを行うためのライブラリです。
https://pypi.org/project/requests/
"bs4"
Beautiful Soupは、Webページから簡単に情報をスクレイピングできるライブラリです。HTMLまたはXMLパーサーの上に位置し、解析、検索、変更等ができる関数が提供されています。Pythonでスクレイピングを行う方法はいくつかありますが、個人的に一番簡単だと感じたBeautifilSoupを使っています。
https://pypi.org/project/beautifulsoup4/
urllists =["https://www.idnet.co.jp/column/page_232.html",(略)
response = requests.get(url)html_doc = response.text
soup = BeautifulSoup(html_doc, 'html.parser')
real_title_tags = soup.find_all('li',{'class':'breadcrumb-item active'})
いかがだったでしょうか。非常にシンプルなコードでスクレイピングできることを実感いただけたのではないでしょうか。
実運用する際には、HTTPリクエストのエラー処理や会員ページなどWEBアクセスする際に認証が必要な場合の処理を追加していくことになります。
スクレイピング実行時の注意
- 高負荷
- Webサイトの規約
- 著作権
自動で処理できる反面、短時間かつ高頻度でウェブサイトにアクセスすることで、当該サイトのサーバやネットワークに高い負荷をかけることになります。
2.Webサイトの規約
Webサイトによっては、規約に同意することで情報を公開しているものもあります。規約の中でスクレイピングを禁止しているサイトも存在します。利用前に該当サイトを利用するための条件を確認しましょう。
3.著作権
サイトの情報は著作物でもあります。スクレイピングにおける課題について解説している法律事務所がありましたので、紹介します。
参考サイト
スクレイピングとは?注目を集める便利なデータ収集方法の法的課題を解説(外部サイト)
スクレイピングは違法?3つの法律問題と対応策を弁護士が5分で解説(外部サイト)
最後に
ソリューションに関するお問い合わせ