【導入実績300社以上】AWS 構築・運用保守サービス

【導入実績300社以上】AWS 構築・運用保守サービス

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【ECサイト構築】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【音声アプリ開発】Twilio アプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【CPU】AMD EPYC 技術検証(PoC)サービス

【CPU】AMD EPYC 技術検証(PoC)サービス

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【15周年記念 特設サイト】ビヨンドは「2022.4.4」で15周年を迎えました!

【15周年記念 特設サイト】ビヨンドは「2022.4.4」で15周年を迎えました!

【スクレイピング入門】Pythonでサイト上のテーブルデータを取得する

どうもはじめまして。
ちかごろ星のカービィディスカバリーにドはまり中のシステムソリューション部 かわいです。

既に暑いですが春ですね~。通勤時も初々しい新入社員らしき装いの方々をちょこちょこ見かけるようになりました(忘却の彼方)。
今回は、そんな新入社員の業務にもちょこっと役に立つ(かもしれない)、Pythonスクレイピングについての記事です。

スクレイピングとはなんぞや?

近年データ分析が注目されていますが、スクレイピングもその基礎となる技術で、主にWebサイト上から目的のデータを取得するための方法です。
もともとscrapeという言葉には「かき集める」という意味があり、そこから派生したようですね。

本記事ではPythonというプログラミング言語を使用し、ページ内のテーブル情報を自動的に取得します。

下準備

Pythonがインストールされていない場合、公式サイト:https://www.python.org/downloads/ から、
使用するOS向けのパッケージをダウンロード・インストールしてください。

完了後、今回使用するライブラリである「BeautifulSoup4」と「html.parser」をインストールします。

本記事ではWindows環境を想定しているので、検索窓、または[CTRL]+[R]キー押下→[cmd]と入力→コマンドプロンプトを開き、以下を実行します。下記のコマンドを実行するとインストールが始まります。

pip install bs4 html.parser

今回はMicrosoft社の以下ページから、Office 365で利用されているドメインやIPアドレス等の情報を自動で取得→csvファイルに書き出すまでをやってみたいと思います(手動で取ろうとすると結構めんどくさい)。

「Office 365 URL および IP アドレス範囲」>「Microsoft 365 Common および Office Online」
https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide

動作環境とコード全文

使用OS:Microsoft Windows 10 Pro
Pyhtonバージョン:3.10

from bs4 import BeautifulSoup
from html.parser import HTMLParser
import csv
from urllib.request import urlopen

headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"}

html = urlopen("https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide")
bsObj = BeautifulSoup(html, "html.parser")

table = bsObj.findAll("table")[4]
rows = table.findAll("tr")

with open(r"C:\Users\python\Desktop\python\2022\microsoft.csv", "w", encoding="cp932", newline="") as file:
writer = csv.writer(file)
for row in rows:
csvRow = []
for cell in row.findAll(["td", "th"]):
csvRow.append(cell.get_text())
writer.writerow(csvRow)

コード解説

from bs4 import BeautifulSoup
from html.parser import HTMLParser
import csv
from urllib.request import urlopen

→ 各ライブラリをインポートさせます。

headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0"}

html = urlopen("https://docs.microsoft.com/ja-jp/microsoft-365/enterprise/urls-and-ip-address-ranges?view=o365-worldwide")
bsObj = BeautifulSoup(html, "html.parser")

→ ユーザエージェント情報を付与します(今回はFirefoxとします)。
urlopenで開きたいページを指定し、BeautifulSoupで読み取らせるためにここで宣言します。

table = bsObj.findAll("table")[4]
rows = table.findAll("tr")

→ 今回のHTMLの構造(各ブラウザのWebデベロッパツールを使用します)から、4つ目のテーブルとして[4]を指定します。また、findAllで"tr"タグを探します。

with open(r"C:\Users\python\Desktop\python\2022\microsoft.csv", "w", encoding="cp932", newline="") as file:
writer = csv.writer(file)
for row in rows:
csvRow = []
for cell in row.findAll(["td", "th"]):
csvRow.append(cell.get_text())
writer.writerow(csvRow)

→ 任意のパスとファイル名で文字コード等を指定します(ファイルが存在しない場合、指定したパスにファイルが作成されます)。

「w」で書き込み、「newline=""」で取得した情報を一列毎に改行して書き出しが可能です。
前述列で指定した rows(trタグ)内からtd と th を探し、ループ処理でその列の値を取得→csvファイルに書き込みます。

出力結果

こんなん出ました。今回は数件の情報だけですが、取得する情報が多ければ多いほど効率的になりますね。

また機会があれば、誰かの役に立つような記事を書いていきたいと思います~。ではまた

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
3
読み込み中...
3 票, 平均: 1.00 / 13
222
facebook twitter はてなブックマーク

この記事をかいた人

About the author

かわ けん

システムソリューション部所属
好奇心旺盛ポケ○ン
興味は持つが、非常に熱しやすく冷めやすい。
とても人懐っこいがテキトーなのでどんどん周囲から人が離れてゆく