Привет! Хотите получить списки вакансий от Indeed? Вы пришли в нужное место.
Indeed — одна из крупнейших систем поиска работы в Интернете, с более чем 250 млн уникальных посетителей в месяц. Это огромный массив данных об объявлениях о вакансиях, зарплатах, профилях компаний и многом другом.
К сожалению, API Indeed не полностью раскрывают все эти данные. Вот тут-то и приходит на помощь парсинг веб-страниц.
В этом руководстве я шаг за шагом расскажу вам, как парсить Indeed с помощью Python. Я поделюсь фрагментами кода, которые вы можете использовать, а также советами, как правильно парсить данные и избегать блокировки.
Я также расскажу, как автоматизировать очистку данных для ежедневного, еженедельного или ежемесячного выполнения. Таким образом, вы сможете автоматически обновлять данные о вакансиях!
К концу вы будете просматривать объявления о вакансиях Indeed как профессионал. Давайте копаться!
Зачем очищать списки вакансий Indeed?
Прежде чем мы запачкаем руки кодом Python, давайте поговорим о зачем Возможно, вы захотите сначала получить данные от Indeed.
Вот лишь несколько идей:
Исследование рынка – Анализируйте тенденции размещения вакансий, чтобы определить растущие востребованные навыки или роли. Действительно есть данные миллионы вакансий во всех отраслях.
Пытливый ум – Посмотрите, какие зарплаты и льготы предлагают компании на аналогичные должности. Полезно при сравнении ваших собственных компенсационных пакетов.
Системы поиска работы – Создавайте собственные доски вакансий, используя данные Indeed, отфильтрованные по определенным ключевым словам или местоположениям.
Инструменты рекрутинга – Отслеживайте новые вакансии, соответствующие навыкам кандидатов, чтобы найти подходящие вакансии.
Возобновить анализ – Извлекайте ключевые слова и навыки из описаний вакансий, чтобы предоставить предложения по улучшению резюме и сопроводительных писем.
Это всего лишь несколько примеров: благодаря обширным структурированным данным о вакансиях возможности безграничны!
Теперь давайте посмотрим, как на самом деле извлечь эти данные с помощью веб-скрапинга.
Действительно ли законно парсить?
Прежде чем углубиться в кодирование, я хочу кратко коснуться законности парсинга веб-страниц. Я знаю, что у некоторых людей здесь есть опасения.
Короткий ответ: извлекать общедоступные данные из Indeed совершенно законно в большинстве случаев, если вы следуете некоторым основным правилам:
Получайте доступ только к общедоступным страницам — не пытайтесь очистить личные данные пользователей или логины.
Не перегружайте серверы Indeed слишком агрессивным парсингом. Следуйте вежливым правилам сканирования.
Соблюдайте Условия обслуживания Indeed. Они конкретно не запрещают парсинг веб-страниц.
Избегайте дословного копирования больших отрывков текста в целях соблюдения авторских прав. Перефразирование — это нормально.
Не публикуйте повторно какие-либо частные, личные или конфиденциальные данные.
Если вы следуете этим рекомендациям здравого смысла, парсинг веб-страниц Indeed для получения общедоступных данных о вакансиях разрешен по закону в большинстве стран.
Конечно, я по-прежнему рекомендую проконсультироваться с адвокатом, если у вас есть какие-либо опасения, поскольку законы различаются. Но вы можете с уверенностью парсить Indeed, если соблюдаете этические нормы!
Хорошо, давайте углубимся в самое интересное — в реальный код!
Очистка списков Indeed с помощью Python
При парсинге больших сайтов, таких как Indeed, Python — отличный выбор благодаря таким библиотекам, как Запросы, Красивый суп и Селен.
Я познакомлю вас со сценарием, который:
Извлекайте списки вакансий, соответствующие поиску по ключевым словам и местоположению
Анализ деталей, таких как названия должностей, зарплаты и описания.
Автоматизируйте нумерацию страниц, чтобы получить все списки на нескольких страницах.
Давайте начнем!
Импорт библиотек
Мы будем использовать Запросы для получения страниц, Красивый суп для разбора, Время дросселировать и Панды для хранения данных:
import requests
from bs4 import BeautifulSoup
import time
import pandas as pd
Запросы и BeautifulSoup — это все, что вам нужно на самом деле нуждаться. Но Pandas помогает управлять данными, а Time ограничивает запросы.
Определить параметры поиска
Во-первых, давайте определим, какие списки вакансий нам нужны. Укажите ключевые слова, местоположение и другие фильтры:
keywords = "Remote Software Engineer"
location = "United States"
salary_min = 100000
Это нацелено на высокооплачиваемые удаленные рабочие места в области программного обеспечения в США. Подстраивайтесь под желаемые критерии.
Получить страницу результатов поиска
После установки параметров мы запросим URL-адрес, передав наши ключевые слова и местоположение:
BASE_URL = "https://www.indeed.com/jobs?"
params = {
‘q‘: keywords,
‘l‘: location,
‘minSalary‘: salary_min,
‘remotejob‘: ‘remote‘ # Filter remote jobs
}
print(f‘Fetching job listings for {keywords} in {location}...‘)
res = requests.get(BASE_URL, params=params)
res.raise_for_status() # Raise exception for 4xx/5xx
При этом выполняется первоначальный поисковый запрос, фильтрация по нашим ключевым словам и параметрам.
Анализ результатов с помощью BeautifulSoup
Далее мы проанализируем HTML-код страницы результатов поиска, чтобы извлечь данные высокого уровня:
soup = BeautifulSoup(res.text, ‘html.parser‘)
listings = [] # List to store listings
for div in soup.find_all(‘div‘, class_=‘job_seen_beacon‘):
title = div.find(‘h2‘).text.strip()
company = div.find(‘span‘, class_=‘companyName‘).text.strip()
location = div.find(‘div‘, class_=‘companyLocation‘).text.strip()
# Append listing data
listings.append({
‘title‘: title,
‘company‘: company,
‘location‘: location
})
Здесь мы находим каждое объявление div
, возьмите ключевые поля, такие как должность и компания, и сохраните их в нашем listings
.
Обработка нумерации страниц
Indeed разделяет результаты на несколько страниц. Нам нужно будет перебрать каждый:
# Track page number
current_page = 0
while True:
# Increment page
current_page += 1
print(f‘Scraping page {current_page}...‘)
# Build URL for next page
next_page_url = BASE_URL + f‘&start={current_page*10}‘
# Fetch page HTML
res = requests.get(next_page_url, params=params)
# Parse HTML
soup = BeautifulSoup(res.text, ‘html.parser‘)
# Return if last page
if not soup.find(‘a‘, {‘aria-label‘: ‘Next‘}):
print(‘Reached last page!‘)
break
# Extract listings
for div in soup.find_all(...):
# Extract listing data
# Sleep to throttle requests
time.sleep(3)
print(f‘Scraped {len(listings)} listings‘)
Здесь мы непрерывно увеличиваем номер страницы, извлекаем следующую страницу, извлекаем листинги и выполняем цикл, пока не достигнем последней страницы.
Добавление короткометражки time.sleep()
дроссель помогает избежать перегрузки серверов Indeed.
Очистка деталей листинга
До сих пор мы извлекали данные высокого уровня, такие как названия и компании. Чтобы получить подробную информацию, такую как зарплаты и описания, мы проверим каждый URL-адрес объявления:
from selenium import webdriver
driver = webdriver.Chrome()
# Loop through listings
for listing in listings:
print(f‘Getting details for {listing["title"]}‘)
# Load listing URL
url = listing[‘url‘]
driver.get(url)
# Extract key fields
desc = driver.find_element_by_id(‘jobDescriptionText‘).text
salary = driver.find_element_by_class_name(‘salary-snippet‘).text
listing[‘desc‘] = desc
listing[‘salary‘] = salary
# Sleep to throttle
time.sleep(2)
driver.quit()
Здесь Selenium предоставляет полноценный браузер для отображения страниц с большим количеством JavaScript. Мы загружаем каждый URL-адрес и извлекаем дополнительные поля, такие как описание и зарплата.
Pro Tip: Рассмотрите возможность использования прокси-сервис чтобы избежать блокировки IP при масштабном использовании Selenium.
Вот и все! С помощью этих шагов вы можете автоматически получить тысячи списков вакансий с Indeed.
Конечным результатом являются структурированные данные о задании, которые можно анализировать или экспортировать в такие инструменты, как Excel. Далее рассмотрим несколько примеров.
Что можно сделать со скопированными данными Indeed?
Теперь, когда мы можем парсить листинги Indeed, что мы можем делать с этими данными?
Вот лишь несколько идей:
Экспорт в Excel для анализа
df = pandas.DataFrame(listings)
df.to_excel(‘indeed_listings.xlsx‘, index=False)
Pandas упрощает экспорт результатов в Excel. Это обеспечивает мощную фильтрацию, сводные таблицы и формулы.
Вы можете анализировать тенденции в разных местах, зарплатах, навыках и многом другом.
Создание баз данных для поиска вакансий
import sqlite3
# Connect to SQLite database
conn = sqlite3.connect(‘jobs.db‘)
# Create table
conn.execute(‘‘‘
CREATE TABLE jobs (
title TEXT,
company TEXT,
description TEXT,
salary REAL
);
‘‘‘)
# Insert listings into database
for listing in listings:
conn.execute("""
INSERT INTO jobs VALUES (
?, ?, ?, ?
)""", (listing[‘title‘], listing[‘company‘],
listing[‘desc‘], listing[‘salary‘]))
conn.commit()
conn.close()
SQLite предоставляет простую базу данных для хранения списков для индивидуального поиска. Интегрируйтесь с Flask, чтобы создать собственную доску вакансий!
Отправьте кандидатам подходящие объявления по электронной почте
import smtplib
from email.message import EmailMessage
# Connect to SMTP server
smtp = smtplib.SMTP(‘smtp.domain.com‘)
for listing in listings:
# Check if listing matches candidate skills
if match:
msg = EmailMessage()
msg[‘Subject‘] = f‘New job for you - {listing["title"]}‘
msg[‘From‘] = ‘[email protected]‘
msg[‘To‘] = ‘[email protected]‘
msg.set_content(listing[‘desc‘])
# Send listing to candidate
smtp.send_message(msg)
smtp.quit()
Python позволяет легко автоматически отправлять кандидатам по электронной почте новые объявления, соответствующие их навыкам и интересам.
Это всего лишь небольшая выборка: данные о миллионах объявлений открывают возможности безграничны!
Теперь давайте посмотрим на автоматический запуск этого парсера.
Планирование ежедневных проверок Indeed
Хотя сбор данных Indeed в режиме реального времени полезен, еще более ценным является настройка автоматизированные, запланированные очистки чтобы ваши данные оставались актуальными.
Вот два хороших варианта запуска парсера по фиксированному расписанию:
Работа Cron
Простой способ автоматизации сценариев Python — cron, стандартная утилита Linux.
Добавьте такую запись, чтобы она запускалась ежедневно в 8 утра:
0 8 * * * python /home/user/indeedScraper.py
Вы можете запланировать сложные повторения. Но в cron не хватает отчетов, если очистка не удалась.
Скребковые платформы
Для более надежного планирования и автоматизации я рекомендую использовать специальную платформу для очистки, например Scrapy or апифай.
Они обеспечивают автоматизацию браузера и прокси-сервера для обработки CAPTCHA, блоков и JavaScript. И у них есть простое встроенное планирование заданий cron.
Вы также получаете оповещения по электронной почте, аналитику производительности и возможности интеграции. Они действительно избавляют от головной боли, связанной с автоматизацией!
Вот быстрое сравнение:
Работа Cron | Скребковые платформы | |
---|---|---|
Цены | Бесплатно | Платные планы |
Прокси и безголовые браузеры | Нужен индивидуальный код | Включенные функции |
Планировщик | Базовый рецидив | Дополнительные параметры |
Мониторинг и оповещения | Ничто | Электронная почта и панель управления |
Хранение результатов | Ручное управление | Встроенное хранилище и экспорт |
Для больших и сложных сайтов, таких как Indeed, я рекомендую использовать специальную платформу.. Дополнительная надежность и возможности оправдывают затраты при сборе данных в больших масштабах.
Давайте подведем итоги
В этом руководстве вы узнали:
почему парсинг Indeed полезен для исследования рынка, поиска работы и инструментов рекрутинга.
КАК извлекать списки имитируя поисковые запросы в Python.
Лучшие практики например регулирование запросов и использование прокси-серверов во избежание блокировок.
КАК детали анализа например, зарплаты и описания со страниц списков.
Варианты автоматизации например, cron и специальные платформы для очистки данных, чтобы поддерживать актуальность ваших данных.
Приведенные выше примеры кода должны дать вам шаблон для начала очистки собственных данных Indeed. Не стесняйтесь настраивать и использовать его для своего случая использования!
Просто не забывайте соблюдать Условия обслуживания Indeed, избегать слишком агрессивного парсинга и соблюдать правила гигиены веб-парсинга, чтобы оставаться на правильной стороне закона.
Я надеюсь, что это руководство дало вам исчерпывающий обзор того, как эффективно парсить Indeed с помощью Python. Автоматизация этих шагов позволит вам использовать невероятный кладезь данных о списках вакансий Indeed.
Дайте мне знать, если у вас есть еще вопросы! Я всегда рад побольше поговорить о лучших практиках парсинга веб-страниц.
Удачи в вашем парсинговом проекте Indeed!