logo
JP

【最新情報】Python で医者情報をスクレイピングする方法はありますか?

Pythonで医師・クリニック情報を取得する方法を解説。Beautiful SoupやSeleniumの選び方、CSV保存、注意点、OctoparseテンプレートとAI Agentの手順を紹介します。

約9分で読めます

はい、Pythonを使えば、Web上で公開されている医師・クリニック・病院情報を取得できます。静的なページはRequestsとBeautiful Soup、JavaScriptで表示されるページはSeleniumなどが基本です。ただし、公式CSVやAPIがあればそちらを優先し、取得前に利用規約と個人情報の扱いを確認する必要があります。

本記事では、医療機関情報をPythonで取得してCSVに保存する考え方とサンプルコードを解説します。さらに、コードを書かずに使えるOctoparse(オクトパース・オクトパス)の専用テンプレートと、自然言語でデータ収集を依頼できる新しいAI Agent機能も紹介します。

ここで扱うのは、施設名、医師名、診療科目、所在地、公開電話番号、最寄駅、施設の特徴、詳細ページURLなど、業務上公開されている情報です。

Pythonで医師・医療機関情報を取得することは可能

PythonによるWebスクレイピングでは、ページのHTMLを取得し、必要な要素を選び、表形式に整えて保存します。医療機関の検索結果ページであれば、施設名、診療科目、住所、電話番号、詳細ページURLなどを1行ずつ整理できます。Webスクレイピングそのものの仕組みは、Webデータを自動取得する仕組みと注意点でも詳しく解説しています。

最初に取得したい情報を定義する

「医者情報」という言葉には、医師本人のプロフィールと、勤務先である医療機関の情報が混在しがちです。コードを書く前に、必要な項目を分けておくと、取得先とデータ構造を判断しやすくなります。

分類主な項目確認ポイント
医師情報氏名、専門分野、資格、所属、経歴個人情報としての利用目的と再利用範囲
医療機関情報施設名、住所、電話番号、最寄駅、診療科目公式データの有無、更新日、表記ゆれ
施設の特徴予約可、バリアフリー、対応検査、診療時間情報の時点、対象サイトの転載条件
対象外患者情報、病歴、診療記録、検査結果本記事の収集対象には含めない

公式CSVやAPIがあればスクレイピングより先に検討する

必要なのが医療機関の基本一覧である場合、Webページを1件ずつ取得するより、公式のCSVやAPIが適していることがあります。例えば、医療情報基盤では全国および都道府県別の機関情報をCSV形式で提供しています。公式データで必要項目を満たせるなら、取得の安定性と更新作業の両面で有利です。

データソースに応じたPythonライブラリの選び方

対象主な方法適している状況
公式CSVpandas構造化済みの医療機関一覧を読み込みたい
静的HTMLRequests+Beautiful Soupページのソース内に必要な文字列が存在する
動的ページSelenium/PlaywrightJavaScript実行後に一覧や詳細が表示される
許可を得た多数ページScrapy巡回、再試行、重複排除を含む運用が必要
ノーコード運用Octoparse開発や保守を減らし、テンプレートやAIを使いたい

静的ページはRequestsとBeautiful Soupを使う

RequestsはWebページのHTMLを取得し、Beautiful Soupは取得済みのHTMLから必要な要素を解析します。施設一覧が最初からHTMLに含まれている場合は、この組み合わせがシンプルです。初めて実装する場合は、Pythonスクレイピングの基本コードも参考になります。

動的ページはSeleniumまたはPlaywrightを使う

ブラウザには医療機関一覧が表示されているのに、Requestsで取得したHTMLにはデータがない場合、JavaScriptによって後から情報が読み込まれている可能性があります。SeleniumやPlaywrightはブラウザを操作できるため、検索条件の入力、ページ送り、スクロール、詳細ページへの移動に対応できます。

ただし、ブラウザ自動化は静的HTMLの取得より実行時間と保守コストが増えます。公式APIやダウンロードデータがないかを確認したうえで、必要な場合だけ選ぶのが現実的です。

Pythonで医療機関情報をCSVに保存する基本手順

以下は、利用許可を確認した医療機関一覧ページを想定した汎用サンプルです。実際のクラス名は対象ページによって異なるため、ブラウザの検証機能でHTMLを確認し、.clinic-cardなどのセレクターを置き換えてください。

必要なライブラリをインストールする

pip install requests beautifulsoup4 pandas

一覧ページから必要な項目を抽出する

import time
from urllib.parse import urljoin

import pandas as pd
import requests
from bs4 import BeautifulSoup

URL = "https://example.com/clinics"
HEADERS = {
    "User-Agent": "YourOrganizationResearchBot/1.0 (contact@example.com)"
}

response = requests.get(URL, headers=HEADERS, timeout=20)
response.raise_for_status()

soup = BeautifulSoup(response.text, "html.parser")
records = []

for card in soup.select(".clinic-card"):
    name = card.select_one(".clinic-name")
    department = card.select_one(".department")
    address = card.select_one(".address")
    phone = card.select_one(".phone")
    detail = card.select_one("a.detail-link")

    records.append({
        "施設名": name.get_text(strip=True) if name else "",
        "診療科目": department.get_text(" / ", strip=True) if department else "",
        "住所": address.get_text(" ", strip=True) if address else "",
        "電話番号": phone.get_text(strip=True) if phone else "",
        "詳細URL": urljoin(URL, detail.get("href")) if detail else "",
    })

time.sleep(1)

df = pd.DataFrame(records)
df = df.drop_duplicates(subset=["施設名", "住所"])
df.to_csv("medical_facilities.csv", index=False, encoding="utf-8-sig")

print(f"{len(df)}件を保存しました")

このサンプルでは、要素が存在しない場合に空文字を入れ、施設名と住所の組み合わせで重複を除外しています。CSVをExcelで開くことを想定し、文字コードにはutf-8-sigを指定しています。

保存後に欠損・重複・更新日を確認する

スクレイピングがエラーなく終了しても、データ品質が保証されたわけではありません。施設名が空欄の行、同じ住所の重複、電話番号の欠落、診療科目の区切り方、検索日を確認します。継続運用では「取得日」列も追加し、いつの情報なのかを追跡できるようにします。

医師情報をスクレイピングするときの注意点

公開情報でも個人情報に該当する場合がある

個人情報保護委員会は、インターネットなどですでに公表されている情報も、他の個人情報と区別せず個人情報保護法の対象になると説明しています。医師名、勤務先、専門分野などを組み合わせてデータベース化する場合は、利用目的、公開範囲、第三者提供の有無を確認してください。詳しくは個人情報保護委員会の公開情報に関するFAQを確認できます。

利用規約と取得範囲を確認する

公開ページであっても、自動取得や大量収集が利用規約で制限されていることがあります。例えばドクターズ・ファイルの現行規約では、プログラム等による機械的な自動検索で大量の情報を収集・記録する行為が禁止事項に含まれます。そのため、実行前に最新の利用条件を確認し、必要に応じて運営者の許可を得てください。

robots.txt、アクセス頻度、取得件数、保存期間も事前に決めます。技術的に取得できることと、その用途で取得・再利用してよいことは同じではありません。

PythonとOctoparseはどう使い分けるべきか

Pythonは、抽出後のデータ変換、独自ロジック、社内システムとの連携をコードで細かく管理したい場合に適しています。一方、既存テンプレートを使いたい場合や、ページ上で取得項目を確認しながら設定したい場合はOctoparseが選択肢になります。詳しい比較は、Octoparse・Beautiful Soup・Seleniumの違いでも確認できます。

比較項目PythonOctoparse
開始方法環境構築とコード作成テンプレート、AI Agent、画面操作
ページ操作コードで実装テンプレートまたは視覚的な設定
データ加工独自処理を柔軟に実装抽出後に表形式で確認・出力
継続運用実行環境、ログ、再試行を管理対応機能ではクラウド・定期実行を利用
向いている人開発者、データエンジニア業務担当者、ノーコードで始めたい人

Octoparseで医師・病院情報の収集を効率化するには?

病院や医師の情報をまとめて収集したい場合、医療機関の公式サイトや病院検索サイトなど、複数のWebサイトを確認する必要があります。病院名、所在地、診療科目、医師名、専門分野などを一件ずつコピーして整理するのは時間がかかるうえ、医師の異動や診療情報の変更に合わせてデータを更新するのも大変です。

こうした作業を効率化する方法としておすすめなのが、AIとの会話だけでWebデータの収集を始められるノーコードツール「Octoparse(オクトパース)」です。

従来のWebスクレイピングでは、取得したい項目を選択し、ページ遷移や収集フローを設定する必要がありました。しかし、Octoparseの新しいAI Agent機能を使えば、必要なデータを自然言語で伝えるだけで、AIに収集作業を任せられます。

例えば、「東京都内の病院について、病院名、住所、電話番号、診療科目を一覧にして」と指示するだけ。複雑な設定を一から行う代わりに、目的に合わせて次の3つの方法でデータを収集できます。

  • AIによるテンプレート提案: AIが収集目的に適した既存テンプレートを提案します。対応するテンプレートがあれば、必要なフィールドをテンプレートに入力するだけで収集を開始できます。
  • Browser Use: AIがブラウザを操作し、病院検索サイトや医療機関のWebページを確認しながら、必要な情報を取得します。
  • Cloud Agent(Beta): AIが収集タスクの作成から実行まで自動で対応します。取得項目の選択やワークフローの構築を一から行う必要がなく、専門知識がなくても自然言語でデータ収集を始められます。

さらに、AI Agentで作成した収集タスクも、スケジュールを設定すれば定期的に実行できます。一度収集して終わりではなく、病院の基本情報や診療科目、公開されている医師情報などを継続的に取得し、変更の確認やデータベースの更新に活用できます。

Octoparseには、医療機関の情報収集に役立つ機能も備わっています。

  • 複数の病院・医師情報をまとめて収集: 複数のページから必要な項目を取得し、医療機関リストや医師データベースの作成にかかる手間を削減できます。
  • クラウド収集・スケジュール実行: PCを起動し続けることなく、設定したスケジュールに沿ってデータを取得できます。定期的な情報確認やリスト更新にも便利です。
  • Excel・CSV・Google Sheetsへの出力: 取得した情報を表形式で整理し、医療機関の調査、地域別の比較、データ分析などに活用できます。

また、OctoparseではAI Agentだけでなく、既存のスクレイピングテンプレートやMCP、APIなど、用途や作業環境に合わせた複数のデータ収集方法を利用できます。簡単な情報収集から継続的なデータ管理まで、目的に適した方法を選べるのも特徴です。

病院や医師の情報を手作業で調べている方や、プログラミングの知識がなくても医療機関のデータベースを作成・更新したい方にとって、Octoparseは有力な選択肢です。

スクレイピングは、自分で細かく「設定する」から、AIに「頼む」へ。 欲しい医療機関の情報をOctoparseに伝えるだけで、これまで手間のかかっていたデータ収集をもっと手軽に始められます。

以下は専門的なテンプレートでデータを収集する方法とAI Agent機能でデータを取集する方法についてそれぞれ詳しく紹介します。

テンプレートでクリニック情報を取得する方法

Octoparseには、ドクターズ・ファイルの検索結果一覧を対象とする「ドクターズ・ファイル検索結果一覧」テンプレートがあります。公式プレビューで確認できる項目は、施設名、詳細URL、アドレス、電話番号、最寄駅、診療科目、特徴、検査です。

このテンプレートの主な対象はクリニックや医院の施設情報です。医師個人の氏名や経歴を標準項目として取得できると誤解しないよう、必要なフィールドは実行前にプレビューで確認してください。また、テンプレートが提供されていることと、対象サイトがすべての大量収集や再利用を許可していることは別です。

https://www.octoparse.jp/template/doctors-files

ステップ1:テンプレートを開く

まずはOctoparseアカウントを作成し、ログインする。その後テンプレートギャラリーで目的に合うテンプレートを検索します。「ドクターズ・ファイル検索結果一覧」テンプレートのページを開き、取得項目、利用可能プラン、実行条件、最新の注意事項を確認してから「今すぐ試す」をクリックします。

Octoparseアカウントを作成

ステップ2:検索結果一覧のURLを入力する

ドクターズ・ファイル側で地域、診療科目などの条件を絞り込み、その検索結果一覧のURLを入力します。テンプレートページの案内では、入力できる検索結果一覧URLは50件までです。

フィールドを入力

ステップ3:保存実行してクラウド収集を選ぶ

入力内容と取得予定のフィールドを確認し、「実行」をクリックして「クラウド収集」を選びます。実行前に対象サイトの最新規約、取得許可、対象件数、利用目的を必ず確認してください。

「実行」をクリックして「クラウド収集」を選び

ステップ4:結果を確認して必要な形式で保存する

収集結果では、空欄、重複、住所表記、電話番号、診療科目を確認します。利用中のプランとテンプレートの条件に応じて、必要な形式で結果を保存します。公式のテンプレートタスクの使い方も実行前に確認すると安心です。例えば、ここでは、ただ27秒で132件の情報が収集されました。

データをエクスポート
データをエクスポート

OctoparseのAI Agentで医療機関情報を直接収集する方法「最新機能」

Octoparseの新しいAI Agent機能では、取得したいデータを自然言語で伝え、AIにデータ収集を依頼できます。従来のように取得項目やワークフローを最初からすべて手動設定する負担を減らせるため、プログラミング経験がない人でも目的から作業を始めやすくなります。

Octoparse 医者情報を収集

ステップ1:Octoparseのアカウントを作成する

Octoparseのアカウントを持っていない場合は、新規アカウントを作成してログインします。ログイン後、OctoparseのホームページまたはアカウントのマイページからAIアシスタントを開き、取得したいデータを自然言語でAIに指示します。

Octoparseのアカウントを作成

ステップ2:必要な医療機関情報を自然言語で伝える

AIアシスタントに、対象、地域、条件、必要なフィールド、希望する出力を具体的に伝えます。例えば「東京都の心臓を治療する医者情報を収集して」のように指示します。

AIアシスタントに自然言語で指示を出す

ステップ3:収集方法を確認してデータの収集を始める

AIが既存テンプレートを提案した場合は、対象サイトとフィールドが目的に合うかを確認します。Webサイトを探索しながら情報を取得したい場合はBrowser Use、AIにタスク作成から実行まで依頼したい場合はCloud Agent(Beta)を選びます。ここでは、Cloud Agent(Beta)モードを選んで、自然言語でデータを収集します。

Cloud Agent(Beta)モードを選んで

ステップ4:データソースを選ぶ

ここでは、いくつかのデータソースが推薦されたので、自分の目的に合わせて全部またはいずれかを選択可能です。例として、Doctorsfile Japanを選択した。

データソースを選ぶ
データソースを選ぶ

ステップ5:タスク結果を確認してエクスポートする

タスクの実行が完了したら「タスクを表示」をクリックし、施設名、住所、電話番号、診療科目などが意図した列に入っているかを確認します。空欄や重複を確認したうえで、利用可能な形式にエクスポートします。

取得したデータを確認
取得したデータをエクスポート

ステップ6:必要に応じて定期実行を設定する

同じ条件で継続的に情報を更新したい場合は「定期実行」をクリックし、収集スケジュールを設定します。定期実行を始めた後も、対象サイトの規約変更、フィールドの欠落、重複件数を定期的に確認してください。

データの定期実行を設定

Python・テンプレート・AI Agentの選び方

状況適した方法判断理由
公式の一括データがある公式CSV/API構造と更新方法が明確
処理をコードで完全に管理したいPython抽出、加工、連携を自由に実装できる
対象サイト向けテンプレートがあるOctoparseテンプレートパラメータ入力から始められる
目的を自然言語で伝えて収集したいOctoparse AI Agentテンプレート提案、Browser Use、Cloud Agentを選べる
画面を見ながら細かく設定したいOctoparseカスタムタスクリスト、詳細ページ、ページ送りを視覚的に調整できる

既存テンプレートで必要な施設情報を取得できるならテンプレートが短い経路です。対象や項目を会話形式で指定したいならAI Agent、独自の加工やシステム連携までコードで制御したいならPythonが向いています。いずれの方法でも、データソースの許可と利用目的の確認は必要です。

よくある質問

質問1:Pythonで病院やクリニックの一覧を取得できますか?

取得先の利用条件で許可されていれば可能です。静的ページはRequestsとBeautiful Soup、動的ページはSeleniumやPlaywrightを利用できます。公式CSVやAPIがある場合は、そちらを優先してください。

質問2:Beautiful Soupで情報が取得できないのはなぜですか?

Beautiful Soupが解析するHTMLに目的の情報が含まれていない可能性があります。JavaScriptで後から表示されるページでは、SeleniumやPlaywright、またはページが利用している公式APIを検討します。

質問3:公開されている医師名は自由に収集できますか?

公開情報であっても、個人情報保護法の対象になり得ます。対象サイトの利用規約に加え、利用目的、他データとの照合、第三者提供、保存期間を確認してください。

質問4:Doctors Filesテンプレートでは医師名も取得できますか?

公式プレビューで確認できる主な項目は、施設名、詳細URL、アドレス、電話番号、最寄駅、診療科目、特徴、検査です。医師名を標準取得できるとは案内されていないため、実行前に現在のフィールドを確認してください。

質問5:OctoparseのAI Agentでは何ができますか?

必要なWebデータを自然言語で伝え、AIによるテンプレート提案、Browser Use、Cloud Agent(Beta)を通じて収集を進められます。対象、地域、フィールド、出力形式を具体的に指示し、実行前後に人が結果を確認することが重要です。

質問6:PythonとOctoparseのどちらを選べばよいですか?

コードレベルの制御、独自のデータ加工、社内システム連携を重視するならPythonが適しています。開発負担を抑え、テンプレートやAIを使って収集を始めたい場合はOctoparseを検討できます。

まとめ

いかがでしょうか。この記事では、Python で医者情報をスクレイピングする方法だけでなく、AIによる収集方法も一括で紹介しました。Pythonを使えば、許可されたWebページから医師・医療機関情報を取得し、CSVとして整理できます。静的HTMLにはRequestsとBeautiful Soup、動的ページにはSeleniumなどを使います。ただし、公式CSVやAPIが存在する場合は、スクレイピングより先に検討するのが基本です。

開発や保守の負担を抑えたい場合、OctoparseのDoctors FilesテンプレートやAI Agentも選択肢になります。テンプレートはクリニック・医院情報の定型取得、AI Agentは自然言語によるタスク設定と実行に向いています。どの方法を選んでも、利用規約、個人情報、取得範囲、データ品質を確認してから運用してください。

競合情報も営業リストも、ウェブデータをそのままExcel・CSV・Google Sheetsに出力

コード不要、誰でも今日から。クリック操作だけで必要な項目を自動抽出

Google Maps・食べログ・iタウンページ向けテンプレートで、リード獲得をすぐに開始

クラウドで毎日・毎週自動実行。大量取得でも安定して、競合動向を常に把握

MCP対応でAIエージェントと連携。収集データをAIに渡して分析・活用まで一気通貫

クレジットカード不要で無料スタート。世界600万人以上が選んだ信頼のツール

クリックだけでウェブ データを取得
無料ダウンロード

今すぐOctoparseを始めて、業務効率化を実現しましょう。

ダウンロード

関連記事