気になるあのサイト、どんな技術で作られている?`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
仮想環境を使用している場合は、その環境をアクティベートしてから上記のコマンドを実行してください。
インストールが完了したら、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’])となります。
📊 取得できる情報の種類
`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 引数で指定しない場合
)
複数のURLを効率的に処理する
複数の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)
取得結果の解析と活用
取得した辞書データは、特定の技術を使っているサイトをリストアップしたり、技術の組み合わせを分析したりするのに利用できます。例えば、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サイトの使用技術を特定しているのでしょうか?その基本的な仕組みは以下のステップに基づいています。
- HTTPリクエスト: 指定されたURLに対してHTTP GETリクエストを送信し、WebページのHTMLソースコードとHTTPレスポンスヘッダーを取得します。
- HTML解析: 取得したHTMLソースコードを解析します。特定のHTMLタグ(例: ``)、コメント、`
コメント