Pythonライブラリ「builtwith」徹底解説:ウェブサイトの技術スタックを丸裸に!🕵️‍♂️

プログラミング

気になるあのサイト、どんな技術で作られている?`builtwith`で覗いてみよう!

🚀 はじめに:「builtwith」とは?

WebサイトやWebアプリケーションを開発・運用していると、「あの競合サイトはどんな技術を使っているんだろう?」「このイケてるサイト、どうやって作られているのかな?」と気になることはありませんか?そんな知的好奇心や調査欲求を満たしてくれるのが、Pythonライブラリ「builtwith」です。

`builtwith`は、指定したURLのWebサイトがどのような技術(Webサーバー、CMS、プログラミング言語、JavaScriptライブラリ、広告ネットワーク、アクセス解析ツールなど)で構築されているかを検出するためのライブラリです。まるでWebサイトのレントゲン写真をとるかのように、その裏側で動いているテクノロジーを明らかにすることができます。

このライブラリは、同名のWebサービスBuiltWith.comの機能をPythonから手軽に利用できるようにしたものです(ただし、ライブラリ自体はBuiltWith.comの公式APIクライアントとは異なります)。Webサイトの技術調査、競合分析、市場調査、セキュリティ調査など、様々な場面で役立つ強力なツールです。😊

このブログでは、`builtwith`ライブラリのインストール方法から基本的な使い方、取得できる情報の詳細、オプション、注意点、そして活用例まで、徹底的に解説していきます。

🛠️ インストール方法

`builtwith`ライブラリのインストールは非常に簡単です。Pythonのパッケージ管理ツールである`pip`を使って、以下のコマンドを実行するだけです。

pip install builtwith

仮想環境を使用している場合は、その環境をアクティベートしてから上記のコマンドを実行してください。

依存ライブラリについて: `builtwith`は内部で他のライブラリに依存しています。`pip`を使えば、これらの依存関係も自動的に解決・インストールされるため、通常は気にする必要はありません。

インストールが完了したら、Pythonのインタラクティブシェルやスクリプトファイルで`import builtwith`を実行し、エラーが出なければ成功です。🎉

🧭 基本的な使い方

`builtwith`の基本的な使い方は非常にシンプルです。ライブラリをインポートし、`builtwith()`関数(または`parse()`メソッド、どちらもほぼ同じ機能を提供します)に調査したいWebサイトのURLを渡すだけです。

以下は、例として`https://example.com`の技術情報を取得する簡単なコードです。

import builtwith

# 調査したいURLを指定
url = 'https://example.com'

try:
    # builtwith() 関数を使って技術情報を取得
    # parse() メソッドも利用可能です: info = builtwith.parse(url)
    info = builtwith.builtwith(url)

    # 結果を表示
    print(f"{url} で使用されている技術:")
    for category, technologies in info.items():
        print(f"  {category}: {', '.join(technologies)}")

except Exception as e:
    print(f"エラーが発生しました: {e}")

このコードを実行すると、`builtwith`が指定されたURLにアクセスし、HTMLソースコード、HTTPヘッダー、JavaScriptファイルなどを分析して、使用されている技術を特定します。結果はPythonの辞書(dictionary)形式で返され、キーが技術カテゴリ(例: ‘web-servers’, ‘javascript-frameworks’)、値がそのカテゴリに属する技術名のリスト(例: [‘Nginx’], [‘jQuery’, ‘React’])となります。

⚠️ 注意点

対象のWebサイトによっては、アクセスが拒否されたり、情報がうまく取得できなかったりする場合があります。また、`builtwith`は内部でHTTPリクエストを行うため、ネットワーク接続が必要です。エラーハンドリング(`try…except`ブロック)を適切に行うことをお勧めします。

📊 取得できる情報の種類

`builtwith`ライブラリは、多岐にわたるカテゴリの技術情報を検出できます。以下に、主なカテゴリとその例を示します。ただし、検出できる技術やカテゴリ名はライブラリのバージョンや対象サイトによって異なる場合があります。

カテゴリ名 (例) 説明 検出される技術の例
web-servers サイトをホストしているWebサーバーソフトウェア Apache, Nginx, IIS, LiteSpeed, OpenResty
programming-languages サーバーサイドで使用されている可能性のあるプログラミング言語 PHP, Python, Ruby, Java, ASP.NET
javascript-frameworks フロントエンドで使用されているJavaScriptフレームワークやライブラリ jQuery, React, Angular, Vue.js, Modernizr, Prototype
cms コンテンツ管理システム WordPress, Drupal, Joomla, Shopify, Magento, Squarespace
web-frameworks Webアプリケーションフレームワーク Ruby on Rails, Django, Flask, Laravel, ASP.NET MVC, Web2py
analytics アクセス解析ツール Google Analytics, Adobe Analytics, Matomo (Piwik), Hotjar
advertising 広告配信ネットワーク Google AdSense, DoubleClick, Criteo, Amazon Associates
cdn コンテンツ配信ネットワーク Cloudflare, Akamai, Amazon CloudFront, Google Cloud CDN, Fastly
widgets サイトに埋め込まれているウィジェットやプラグイン Google Maps, Facebook Like Button, Twitter Widget, reCAPTCHA
font-scripts Webフォント配信サービスやスクリプト Google Fonts, Typekit, Font Awesome
operating-systems サーバーのOS(HTTPヘッダなどから推測) Linux (Ubuntu, CentOS), Windows Server
blogs ブログプラットフォームやエンジン WordPress (self-hosted), Blogger, Tumblr
ecommerce Eコマースプラットフォーム Shopify, Magento, WooCommerce, BigCommerce
video-players 動画プレイヤーライブラリ YouTube IFrame Player, Vimeo Player, JW Player
message-boards フォーラムソフトウェア phpBB, vBulletin, Discourse
mapping 地図関連サービス・ライブラリ Google Maps API, Leaflet, Mapbox GL JS
payment-processors 決済代行サービス(検出可能な場合) Stripe, PayPal
web-accelerators Webサイト高速化技術 Varnish Cache
marketing-automation マーケティングオートメーションツール HubSpot, Marketo, Pardot
mobile モバイル対応技術(レスポンシブデザインなど) Viewport Meta, Bootstrap
ssl-certificates SSL証明書の発行元(検出可能な場合) Let’s Encrypt, DigiCert, Comodo
tag-managers タグマネジメントシステム Google Tag Manager, Adobe Experience Platform Launch, Tealium
live-chat ライブチャットツール Intercom, Zendesk Chat, Drift
webmail Webメールプロバイダ(MXレコードなどから推測) Google Workspace (G Suite), Microsoft 365
encoding 文字エンコーディング UTF-8
document-info 文書タイプ(DOCTYPE) HTML5

これらの情報は、サイトのHTMLソースコード、レスポンスヘッダー、特定のファイルパス(例: `/wp-content/`)、JavaScriptのグローバル変数などをパターンマッチングによって解析し、推測されています。そのため、常に100%正確であるとは限りません。

⚙️ オプションと高度な使い方

`builtwith`関数(または`parse`メソッド)は、いくつかのオプション引数を受け付けます。これらを使うことで、動作を細かく制御できます。

# オプションを指定して実行する例
info = builtwith.builtwith(
    url,
    headers={'User-Agent': 'MyCustomBot/1.0'}, # カスタムユーザーエージェント
    timeout=10,                                # タイムアウト秒数 (デフォルト: 30)
    # html=None,                              # 事前に取得したHTMLを渡す場合
    # user_agent=None                         # headers 引数で指定しない場合
)

複数のWebサイトの技術情報を一度に調査したい場合、ループ処理とエラーハンドリングを組み合わせるのが一般的です。

import builtwith
import time

urls_to_check = [
    'https://example.com',
    'https://github.com',
    'https://non-existent-domain-abcxyz.com', # 存在しないドメイン
    'https://httpbin.org/delay/15'           # 応答が遅いURL
]

results = {}

for url in urls_to_check:
    print(f"調査中: {url}")
    try:
        # タイムアウトを短めに設定
        info = builtwith.builtwith(url, timeout=5)
        results[url] = info
        print(f"  -> 完了")
        # 簡単な技術情報サマリを表示
        summary = {cat: tech[:2] for cat, tech in info.items()} # 各カテゴリ2つまで
        print(f"     技術サマリ: {summary}")

    except Exception as e:
        print(f"  -> エラー: {e}")
        results[url] = {'error': str(e)}

    # 連続アクセスを避けるために少し待機 (礼儀正しいアクセス)
    time.sleep(1)

print("\n--- 全ての調査結果 ---")
for url, info in results.items():
    if 'error' in info:
        print(f"{url}: エラー - {info['error']}")
    else:
        print(f"{url}:")
        for category, technologies in info.items():
            print(f"  {category}: {', '.join(technologies)}")
        print("-" * 20)
💡 ヒント: 大量のURLを処理する場合は、`concurrent.futures`モジュールなどを使って並列処理を行うと、全体の処理時間を短縮できます。ただし、対象サーバーに過度な負荷をかけないよう、同時実行数やリクエスト間隔に注意が必要です。

取得した辞書データは、特定の技術を使っているサイトをリストアップしたり、技術の組み合わせを分析したりするのに利用できます。例えば、WordPressとWooCommerceを両方使っているサイトを探す、特定のJavaScriptライブラリの普及率を調査するなど、様々な応用が考えられます。

# 上記の results を使って解析する例

wordpress_sites = []
react_sites = []
wordpress_woocommerce_sites = []

for url, info in results.items():
    if 'error' not in info:
        technologies_flat = set(tech for tech_list in info.values() for tech in tech_list)

        if 'WordPress' in technologies_flat:
            wordpress_sites.append(url)
            if 'WooCommerce' in technologies_flat:
                wordpress_woocommerce_sites.append(url)

        if 'React' in technologies_flat:
            react_sites.append(url)

print("\n--- 解析結果 ---")
print(f"WordPressを使用しているサイト ({len(wordpress_sites)}件):")
for site in wordpress_sites: print(f"  - {site}")

print(f"\nReactを使用しているサイト ({len(react_sites)}件):")
for site in react_sites: print(f"  - {site}")

print(f"\nWordPress と WooCommerce を両方使用しているサイト ({len(wordpress_woocommerce_sites)}件):")
for site in wordpress_woocommerce_sites: print(f"  - {site}")

🔍 `builtwith`の仕組み

`builtwith`ライブラリは、どのようにしてWebサイトの使用技術を特定しているのでしょうか?その基本的な仕組みは以下のステップに基づいています。

  1. HTTPリクエスト: 指定されたURLに対してHTTP GETリクエストを送信し、WebページのHTMLソースコードとHTTPレスポンスヘッダーを取得します。
  2. HTML解析: 取得したHTMLソースコードを解析します。特定のHTMLタグ(例: ``)、コメント、`

コメント

タイトルとURLをコピーしました