Как собирать данные о зарплатах и отзывах на Glassdoor для сравнения компенсаций
Glassdoor скрывает свои данные за экраном входа в систему, но контент уже находится в JSON на странице, под модальным окном. Вот как найти ID работодателя, прочитать этот JSON и сравнить компенсации, не наткнувшись на блокировку.
Glassdoor является эталонным набором данных для исследований компенсаций и репутации работодателей — зарплаты, рейтинги и отзывы по миллионам компаний. Он также агрессивно ограничивает скорость и показывает экран входа. Трюк, который многие упускают: этот экран косметический. Данные компании уже загружены в JSON на странице, под модальным окном. Это руководство показывает, как собирать данные о зарплатах и отзывах на Glassdoor для сравнения компенсаций — разрешите ID работодателя, прочитайте JSON и регулируйте запросы, чтобы не наткнуться на стену 403.
Шаг 1: разрешите компанию на ID работодателя
Каждая страница Glassdoor привязана к числовому ID работодателя, а не к имени. Существует внутренний конечный пункт автозаполнения, который сопоставляет имя компании с её ID — тот же, который используется в поисковой строке. Обратитесь к нему, и вы получите каноническое имя плюс ID, который нужен для построения всех остальных URL:
import requests
proxy = "http://USER:PASS@gate.quantumproxies.io:8000"
proxies = {"http": proxy, "https": proxy}
def find_employer_id(name):
url = "https://www.glassdoor.com/api-web/employer/find.htm"
params = {"autocomplete": "true", "maxEmployersForAutocomplete": 10, "term": name}
r = requests.get(url, params=params, proxies=proxies, timeout=15,
headers={"User-Agent": "Mozilla/5.0"})
return r.json() # -> [{"id": 7853, "shortName": "eBay", ...}, ...]
print(find_employer_id("eBay"))
С ID вы можете построить URL обзора (/Overview/Working-at-NAME-EI_IE{id}.htm) и URL отзывов (/Reviews/NAME-Reviews-E{id}.htm). Браузер пока не нужен.

Шаг 2: читайте JSON, а не HTML
Glassdoor — это приложение Next.js, поэтому каждая страница отправляет свои данные в виде JSON — в теге скрипта __NEXT_DATA__ и кэше Apollo GraphQL. Разбирайте это вместо парсинга отрисованного DOM: он содержит рейтинги, данные о зарплатах, текст отзывов, а также фирмографику, такую как доход, штаб-квартира, размер компании, год основания и отрасль. Это гораздо стабильнее, чем CSS-селекторы, которые Glassdoor меняет за data-test атрибутами.
import json, re
def scrape_overview(name, employer_id):
url = f"https://www.glassdoor.com/Overview/Working-at-{name}-EI_IE{employer_id}.htm"
r = requests.get(url, proxies=proxies, timeout=20,
headers={"User-Agent": "Mozilla/5.0"})
m = re.search(r'<script id="__NEXT_DATA__"[^>]*>(.*?)</script>', r.text, re.S)
data = json.loads(m.group(1))
# firmographics + ratings live inside the Apollo cache under props
return data["props"]["pageProps"]
data = scrape_overview("eBay", 7853)
Модальное окно входа, которое вы видите в браузере, — это фиксированный экран (его ID контейнера HardsellOverlay), наложенный поверх страницы. Поскольку основной контент уже находится в DOM и JSON, HTTP-запрос, который читает исходную разметку, вообще не видит модальное окно. Если вы всё же используете браузер, вы можете убрать экран с помощью однострочной CSS-инъекции (display:none), а не пытаться войти в систему.
Постраничное чтение отзывов и распределение зарплат
Отзывы и зарплаты разбиты на страницы, и курсор пагинации находится в том же JSON, который вы уже разобрали, а не в хрупкой кнопке "далее", которую нужно нажимать. Прочитайте данные текущей страницы, найдите курсор или номер страницы в полезной нагрузке и запросите URL следующей страницы напрямую. Вот почему разбор JSON лучше, чем управление браузером: вы переходите по страницам с простыми HTTP-запросами, по одному на страницу, с любой скоростью, которую выберете. Извлеките текст отзыва, звездный рейтинг, должность, местоположение и дату для каждой записи, и у вас будет структурированный корпус отзывов, который можно проанализировать на предмет настроений — тот же сырой материал, который описан в нашем руководстве по сбору отзывов.
Зарплаты — это более ценная цель, и честный совет — рассматривать их как распределения, а не точечные значения. Одна собранная цифра может быть шумной; полезный сигнал — это диапазон и медиана по многим подачам для роли в данном месте. JSON раскрывает нужные вам числа — базовую оплату, количество образцов за каждой оценкой, валюту и местоположение — поэтому агрегируйте их самостоятельно, а не доверяйте одной цифре. Взвешивайте по размеру выборки, исключайте роли с недостаточным количеством данных, чтобы быть значимыми, и всегда связывайте зарплату с её местоположением и датой сбора — желательно через резидентский выход на этом рынке — потому что сравнения компенсаций устаревают и сильно варьируются в зависимости от рынка. Эта дисциплина превращает собранные строки в ориентир, который команда по найму или финансам может действительно защитить. Это также защищает вас от классической ловушки цитирования одной броской цифры, которая оказывается основанной на двух подачах трёхлетней давности.
Шаг 3: установите регион, чтобы данные соответствовали вашему рынку
Glassdoor локализует зарплаты и контент по регионам через cookie tldp: 1 — США, 2 — Великобритания, 3 — Канада, 4 — Индия, 5 — Австралия, 6 — Франция, 7 — Германия. Установите его, чтобы сравнить компенсации на рынке, который вас действительно интересует — цифра зарплаты в США бессмысленна для роли в Великобритании. Совместите cookie с выходом через прокси в соответствующей стране, чтобы запрос был согласован от начала до конца. Наше руководство по сбору B2B данных охватывает поддержание согласованности геосигналов по всему конвейеру.
Получите гео-направленные резидентские прокси
Обработка ограничения скорости 403
Glassdoor отвечает на агрессивный сбор данных с помощью HTTP 403, а не CAPTCHA. Рассматривайте 403 как сигнал о темпе, а не тупик: отступите экспоненциально, переключитесь на новый IP и замедлите общий темп. Один IP центра обработки данных, проходящий через пагинацию отзывов, будет ограничен в течение одной-двух страниц; распределение запросов по резидентскому пулу и паузы между ними позволяют оставаться незамеченными.
import time, random
def get_with_backoff(url, tries=4):
for attempt in range(tries):
r = requests.get(url, proxies=proxies, timeout=20,
headers={"User-Agent": "Mozilla/5.0"})
if r.status_code == 200:
return r
if r.status_code == 403: # rate-limited: pace + rotate
wait = (2 ** attempt) + random.random()
time.sleep(wait) # rotating gateway gives a new IP
return None
Коротко об этике и законе: сравнивайте в совокупности. Зарплаты и рейтинги полезны как распределения; индивидуальные отзывы, привязанные к идентифицируемым людям, являются личными данными, поэтому не восстанавливайте профили рецензентов и уважайте Условия Glassdoor и директивы robots. Это руководство, а не юридическая консультация — проверьте своё законодательство. Наш обзор законности веб-скрейпинга в 2026 году углубляется в эту тему.

Часто задаваемые вопросы
Как собрать отзывы с Glassdoor с помощью Python?
Разрешите компанию на её ID работодателя через внутренний конечный пункт автозаполнения, создайте URL отзывов с этим ID, затем разбирайте JSON __NEXT_DATA__ на странице, а не HTML. Направляйте запросы через резидентские прокси и отступайте при любом 403. Текст отзыва, рейтинги и курсоры пагинации находятся в этой JSON нагрузке.
Могу ли я обойти экран входа на Glassdoor?
Обычно в этом нет необходимости. Запрос на вход — это косметический экран, наложенный поверх контента, который уже загружен на странице и в её JSON. Простой HTTP-запрос, который читает исходную разметку, никогда не отображает модальное окно. Если вы используете реальный браузер, скройте экран с помощью CSS-инъекции display:none вместо входа в систему.
Почему Glassdoor возвращает ошибки 403?
403 — это ограничение скорости Glassdoor, обычно из-за того, что слишком много запросов поступило с одного IP слишком быстро. Замедлитесь, добавьте экспоненциальное отступление и переключитесь через резидентский пул прокси, чтобы запросы распределялись по многим IP. Это проблема темпа, а не постоянная блокировка — стабильное, похожее на человеческое время решает её.
Законно ли собирать данные с Glassdoor?
Сбор публичных, совокупных данных о компаниях для сравнения обычно менее рискован, но Условия Glassdoor ограничивают автоматизированный доступ, а индивидуальные отзывы могут быть личными данными. Держите это в совокупности, не восстанавливайте идентифицируемых людей и уважайте robots и Условия. Это общее руководство, а не юридическая консультация — оцените свой собственный случай использования.
Вся работа состоит из трёх шагов: разрешите ID работодателя, прочитайте JSON, который уже содержится на странице, и регулируйте запросы по чистым IP, чтобы 403 были редкостью. Делайте это, и Glassdoor станет живым источником данных для сравнения компенсаций, а не экраном входа, от которого вы постоянно отскакиваете.