法人リストから企業ホームページのHTTPS対応状況と更新頻度を自動分析するツールを作ってみた

aiconイメージ

会社名のリストから、各企業のWebサイトURL、HTTPS対応状況、アーカイブ情報、更新頻度までを一括で取得できるツールです。

ここからソースコードを確認できます

https://github.com/naso22/generateList

なぜ作ろうと思ったのか?

  • 脆弱性のあるwebサイトはどのくらいあるのかを知りたかった
  • 更新されていないで放置されているサイトはどのくらいあるのかを知りたかった

作ったツールの全体像

何ができるようになったか?

作ってみた結果、以下の情報を自動分析できるようになりました:

1. 会社名からWebサイトURLを取得(DuckDuckGo検索エンジンを使用)

2. WebサイトのHTTPS対応状況を自動判定

3. Webサイトのアーカイブ状況を確認(Internet ArchiveのWayback Machine)

4. 2025年以降のアーカイブ回数で更新頻度を分析

5. サイトの信頼性と活発度を数値化


技術的な仕組み

会社名リスト → DuckDuckGo検索 → URL取得 → HTTPS判定 → Wayback Machine確認 → 更新頻度分析 → CSV出力

実際に作ってみた実装ポイント

1. DuckDuckGoで会社URLを取得してみた

def get_company_url_via_duckduckgo(company_name):
    headers = {'User-Agent': 'Mozilla/5.0'}
    query = f"{company_name}"
    url = f"https://html.duckduckgo.com/html/?q={query}"
    # ... 省略 ...

会社名をDuckDuckGoの検索エンジンに送信して、検索結果の上位に表示されるWebサイトのURLを取得しています。


なぜDuckDuckGoにしたのか?

最初はGoogleを使おうと思ったんですが、API制限が厳しくて営業用途での大量検索に対応できませんでした。DuckDuckGoなら制限が緩かったからです。

2. HTTPS対応状況を自動判定してみた

# URLがhttpsで始まる場合はそのまま、そうでない場合は×を設定

if url and url.startswith('https'):
    is_https = '✔️'  # httpsの場合は✔️に設定
elif not url:
    url = 'URLなし'  # URLがない場合

取得したURLがHTTPSで始まるかどうかを自動判定して、セキュリティ対応状況を可視化しています。

なぜHTTPS判定が重要なのか?

作ってみて気づいたのですが、HTTPS対応は企業のITセキュリティ意識を示す重要な指標になります。

3. Wayback Machineで更新頻度を分析してみた

def get_wayback_snapshot_count_from_2025(url):
    start_date = datetime(2025, 1, 1)
    end_date = start_date + timedelta(days=90)  # 2025年4月1日
    # ... 省略 ...

2025年1月1日から3か月間の期間で、そのWebサイトが何回アーカイブされたかを数えて、更新頻度を分析しています。

会社名リストの準備

company_list.csvには、調査したい会社名をG列(7列目)に記載します。ヘッダーは不要で、1行1社の形式です。

実行してみた結果


方法1: Pythonで直接実行してみた

pip install -r requirements.txt
python main.py


方法2: Dockerで実行してみた(推奨)

docker build --no-cache -t company-scraper .

docker run --rm -v ${PWD}:/app company-scraper


Dockerを使うと、環境の違いによる問題を避けられます。


出力結果

実行が完了すると、`集計後.csv`ファイルが生成されます。以下の列が含まれています:

- 会社名: 調査対象の企業名

- URL: 取得されたWebサイトのURL

- 最新アーカイブ日時: 最後にアーカイブされた日時

- 最新アーカイブURL: 最新のアーカイブページへのリンク

- 2025年アーカイブ回数: 2025年以降のアーカイブ回数(更新頻度の指標)

- httpsかどうか: セキュリティ対応状況(✔️=HTTPS対応済み、×=未対応)