In this Article
このガイドでは、PythonでGlassdoorをスクレイピングして企業レビューや集計済みの給与データを取得する方法と、同じく重要な法的・技術的な注意点を解説します。Glassdoorは難易度の高い対象です。JavaScriptでコンテンツをレンダリングし、ボットに対して強力な防御を行い、データの多くを登録ウォールの背後に置いています。そのため、Glassdoor用のスクレイパーには、実際のブラウザを操作するPlaywright、住宅用プロキシ、そして越えてはならない境界を明確にするルールが必要です。対象は公開ページに限定し、保存するデータは最小限にとどめ、ログインを決して回避しないでください。そして、そもそもGlassdoorの利用規約が自動アクセスを制限していることを理解しておく必要があります。
私はAndrii Byzovです。Webデータパイプラインを構築するAIネイティブのフラクショナルCMOです。以下では、Glassdoorでスクレイピングできるものとできないもの、最初に押さえておくべき法的な注意点、そして公開レビューおよび給与ページ向けの実用的なコードパターンを紹介します。
重要なポイント
- GlassdoorはJavaScriptでレンダリングされ、強固な対策が施されています。通常の
requestsだけでは不十分なことが多く、Playwrightのようなヘッドレスブラウザが一般的に必要になります。 - Glassdoorの規約では、書面による許可のない自動アクセスが制限されています。そのため、公開されているログアウト状態のスクレイピングであっても、ToSに違反する可能性があります。ログインウォールは追加のリスクであり、唯一の境界線ではありません。
- レビューはユーザー生成の半個人的なコンテンツです。Glassdoor自身も匿名性は保証されないと述べています。保存する情報は最小限にし、個人を特定できる情報は保存せず、レビュー本文を再公開しないでください。
- 住宅用プロキシは大規模な利用で役立ちます。Glassdoorはレート制限を行い、データセンターIPをすばやく検出します。ただし、アクセスを保証したり、スクレイピングをコンプライアンス上問題ないものにしたりするツールはありません。
- これは教育目的として扱ってください。 商用利用または大規模利用の場合は、Glassdoorの許可と法的助言を得てください。
Glassdoorでスクレイピングできるもの・できないもの
まずこの線引きを理解することが、Glassdoorのスクレイピングをできる限り適切な範囲にとどめる鍵です。そして、これはGlassdoorのスクレイピングにおける最も重要な判断でもあります。
- 最もリスクが低いもの(公開・非個人情報): 企業の総合評価、および職種別の集計済み給与レンジ。Glassdoorがアカウントなしで表示する主要な数値。
- 注意して扱うべきもの(公開されているがセンシティブ): レビューの抜粋(評価、長所/短所のテキスト)は公開されていますが、ユーザー生成で半個人的な性質を持ちます。収集する場合は最小限に抑え、集計シグナルを保持し、個人を特定できる情報は削除し、テキストを再公開しないでください。
- 対象外: ログイン/登録ウォールの内側にあるもの、レビュアーの身元情報やあらゆる個人データ、レビューコンテンツの再公開。「続きを読むにはサインイン」のゲートを回避しないでください。

Glassdoorをスクレイピングすることは合法ですか?
場合によります。そしてここでは、ほとんどのサイト以上に注意点が重要です。Glassdoorの利用規約は、書面による許可なしの自動アクセスを制限しています。そのため、公開されているログアウト状態のページをスクレイピングする場合でも、同社のToSに違反する可能性があります。ログインウォールは追加のリスクであり、唯一のリスクではありません。さらに、多くのコンテンツはログイン制限されており、レビューは著作権やプライバシー上の重みを持つユーザー生成コンテンツです。最もリスクの低い方法は、ログアウト状態を維持し、公開されている集計データ(評価、給与レンジ)を優先することです。個人データの取得・保存は最小限にとどめ、robots.txtとレート制限を尊重し、レビュー本文を再公開しないでください。そして商用目的であれば、Glassdoorの許可を得てください。より包括的な考え方については、ウェブスクレイピングが合法かどうかに関する当社ガイドをご覧ください。これは一般的な情報であり、法的助言ではありません。商用のGlassdoorデータプロジェクトを行う前に、弁護士に相談してください。
ステップ 1。環境をセットアップする
Glassdoor は JavaScriptを多用しているため、このスクレイパーでは生のHTTPリクエストではなく、Playwrightを通じて実際のブラウザを操作します。
# Glassdoor renders content with JavaScript and defends hard, so use a
# real browser (Playwright) rather than plain requests.
pip install playwright beautifulsoup4
playwright install chromium
ステップ 2。公開 Glassdoor ページを読み込む
住宅用プロキシ経由でヘッドレスChromiumを起動し、公開されている企業レビューのURLを読み込みます。ログインは不要です。ブラウザがページの JavaScript を実行するため、HTML を読み取る前にレビューがレンダリングされます。
from playwright.sync_api import sync_playwright
# Route the browser through a residential proxy (see Step 4)
PROXY = {"server": "http://gw.dataimpulse.com:823",
"username": "YOUR_DI_LOGIN", "password": "YOUR_DI_PASSWORD"}
def get_html(url):
with sync_playwright() as p:
browser = p.chromium.launch(proxy=PROXY, headless=True)
page = browser.new_page(locale="en-US")
page.goto(url, wait_until="networkidle", timeout=60000)
html = page.content()
browser.close()
return html
# A PUBLIC company reviews page (do not log in)
html = get_html("https://www.glassdoor.com/Reviews/Example-Company-Reviews-E12345.htm")
ステップ 3。公開されている Glassdoor レビューをスクレイピングする
Glassdoorのレビューをスクレイピングするには、公開されているレビューカードから、評価、タイトル、長所、短所、日付などの構造化フィールドを抽出します。Glassdoorのclass名は難読化されており、頻繁に変わるため、DevTools で現在のセレクタを確認してください。以下の data-test 属性は例示です。
from bs4 import BeautifulSoup
def parse_reviews(html):
"""Parse the publicly visible reviews. Selectors change often —
confirm the current ones in DevTools before relying on them."""
soup = BeautifulSoup(html, "html.parser")
reviews = []
for card in soup.select('[data-test="review-details"]'):
def t(sel):
el = card.select_one(sel)
return el.get_text(strip=True) if el else None
reviews.append({
"rating": t('[data-test="review-rating"]'),
"title": t('[data-test="review-title"]'),
"pros": t('[data-test="pros"]'),
"cons": t('[data-test="cons"]'),
"date": t('[data-test="review-date"]'),
})
return reviews
print(parse_reviews(html)[:3])
ステップ 4。集計された給与データをスクレイピングする
Glassdoorの給与ページには、職種別の集計数値が表示されます。個人の情報ではなく、基本給の中央値と範囲です。収集対象は、この公開されている集計ビューに限定してください。同じ方法で取得できます。
def parse_salaries(html):
"""Parse aggregated, public salary ranges (role-level, not individuals)."""
soup = BeautifulSoup(html, "html.parser")
rows = []
for row in soup.select('[data-test="salary-row"]'):
def t(sel):
el = row.select_one(sel)
return el.get_text(strip=True) if el else None
rows.append({
"job_title": t('[data-test="job-title"]'),
"base_pay": t('[data-test="median-base"]'),
"range": t('[data-test="pay-range"]'),
})
return rows
salary_html = get_html("https://www.glassdoor.com/Salaries/example-company-salaries-E12345.htm")
print(parse_salaries(salary_html)[:3])
ステップ 5。Glassdoorのボット対策に対応する
Glassdoorは、IPレピュテーションスコアリング、レート制限、ボット検出チャレンジなど、強力なアンチボット対策を使用しています。確実な回避方法はなく、ブラウザとプロキシを使ってもスクレイピングがコンプライアンスに準拠するわけではありません。ただし、公開ページでのブロックを減らす方法は2つあります。現実的なヘッダーを備えた実際のブラウザコンテキストを使うこと、そして単一のIPが使い切られないようにローテーション型住宅用プロキシを使うことです。ここではデータセンターIPはすぐに検出されます。DataImpulse residential proxies($1/GB、ローテーション、195か国)は実ユーザーのIPを利用できます。リクエストのペースを調整してください。Glassdoorに大量のリクエストを送るとブロックされ、法的立場を弱めるサーバー負荷の問題も引き起こします。
# Rotate residential IPs and look like a real browser.
# Use a fresh session id per run so each crawl gets a clean IP.
PROXY = {"server": "http://gw.dataimpulse.com:823",
"username": "YOUR_DI_LOGIN__cr.us;sid.run1",
"password": "YOUR_DI_PASSWORD"}
def fetch(url):
with sync_playwright() as p:
browser = p.chromium.launch(proxy=PROXY, headless=True)
ctx = browser.new_context(
locale="en-US",
user_agent=("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"),
viewport={"width": 1366, "height": 900},
)
page = ctx.new_page()
page.goto(url, wait_until="networkidle") # pace requests; Glassdoor rate-limits
html = page.content()
browser.close() # always clean up the browser
return html
ステップ 6。データをエクスポートする
収集した公開の集計データを JSON と CSV に保存します。個人データは含めず、レビュアーの身元情報ではなく、評価や集計されたテキストを保存してください。
import json, csv
reviews = parse_reviews(html)
with open("glassdoor_reviews.json", "w", encoding="utf-8") as f:
json.dump(reviews, f, indent=2, ensure_ascii=False)
if reviews:
with open("glassdoor_reviews.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=reviews[0].keys())
w.writeheader(); w.writerows(reviews)
よくある質問
Glassdoorをスクレイピングすることは合法ですか?
状況によりますが、注意点は現実的に重要です。Glassdoorの規約では、書面による許可のない自動アクセスが制限されているため、公開ページのスクレイピングであってもToSに違反する可能性があります。また、サイトの多くはログインが必要で、レビューは著作権で保護された半個人性のあるユーザーコンテンツです。実施する場合、最もリスクの低い方法は、公開されている集計データ(評価、給与レンジ)のみに限定し、ログアウト状態で、取得範囲を最小化し、再公開を行わないことです。商用利用については、許可を取得し、専門家に相談してください。これは一般的な情報であり、法的助言ではありません。詳しくは当社のweb scraping legality guideをご覧ください。
ログインせずにGlassdoorをスクレイピングできますか?
はい。むしろログアウト状態を維持すべきです。Glassdoorは、一部の企業評価、レビューの抜粋、集計された給与データを公開しています。ログイン後の領域をスクレイピングすることは、サインイン時に同意した規約に違反することになり、リスクの高い領域です。アカウントなしで表示される内容のみを収集してください。
単純なrequestsスクリプトがGlassdoorで機能しないのはなぜですか?
GlassdoorはJavaScriptでコンテンツをレンダリングし、ボット検出も実行しているため、通常のHTTPリクエストでは利用可能なデータがほとんど返らないか、チャレンジページが表示されます。ページのJSを実行できるヘッドレスブラウザ(Playwrightなど)に加え、検知を避けるためのレジデンシャルプロキシが必要です。
Glassdoorをスクレイピングするにはプロキシが必要ですか?
数ページを超えて収集する場合は、役立つことがあります。Glassdoorはレート制限を行い、データセンターIPをすぐに検知するため、単一IPは短時間でブロックされます。ローテーション型レジデンシャルプロキシを使えば、多数の実ユーザーIPにリクエストを分散でき、アクセス元を分散できます。ただし、ボット対策の回避や大規模な収集を正当化するものではありません。
個別の給与情報やレビュー投稿者名をスクレイピングできますか?
いいえ。行うべきではありません。Glassdoorの給与データは集計情報(職種別の中央値やレンジ)として読むことを前提としており、レビュー投稿者の身元情報は規制対象となる個人データの領域にあります。集計された非個人のシグナルのみを収集してください。
結論
Glassdoorのスクレイピングは可能ですが、制約があります。JavaScriptでレンダリングされ、防御が強固なサイトであり、価値のある情報の多くはゲート内にあるため、実用的なGlassdoorスクレイパーにはヘッドレスブラウザとローテーション型の住宅用プロキシが必要です。また、ログインを回避せず、公開されている非個人の集計データのみを収集するという明確なルールも欠かせません。Playwrightと住宅用プロキシで技術面を整え、適切な範囲で運用してください。より広範な設定については、当社のWebスクレイピングに最適なプロキシガイドをご覧ください。
最終更新日:2026年6月25日。
