перейти к содержанию

Ваше пошаговое руководство по парсингу данных с Indeed

Привет! Хотите получить списки вакансий от 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. Это обеспечивает мощную фильтрацию, сводные таблицы и формулы.

Действительно данные в 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!

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *