Парсинг веб-страниц с помощью Python: Руководство для начинающих по извлечению вакансий

Table Of Content
- Парсинг вакансий с сайта jobinventory.com
- Установка
- Парсинг одной страницы
- Определение поискового запроса и местоположения
- Формирование URL
- Отправка GET-запроса по URL
- Парсинг HTML-контента с помощью BeautifulSoup
- Поиск всех вакансий на странице
- Определение пустых списков для хранения деталей вакансий
- Перебор каждой вакансии и извлечение соответствующих деталей
- Очистка описаний вакансий с использованием регулярных выражений
- Создание объекта DataFrame для хранения деталей вакансий
- Экспорт DataFrame в CSV-файл
- Парсинг нескольких страниц
- Определите поисковый запрос и местоположение
- Составьте базовый URL
- Определите пустые списки для хранения информации о вакансиях
- Проходите по каждой странице списка вакансий
- Очистите описания вакансий с использованием регулярных выражений
- Создайте объект DataFrame Pandas для хранения информации о вакансиях
- Экспортируйте объект DataFrame в CSV-файл
- Ваша вики, документы и проекты. Вместе.
- Новый инструмент, который объединяет ваши повседневные рабочие приложения в одно. Это все-в-одном рабочее пространство для вас и вашей команды.

Вы устали от ручного прокручивания бесконечных объявлений о вакансиях в поисках идеальной возможности? Тогда этот учебник именно для вас! В этом руководстве я расскажу вам о шагах парсинга объявлений о вакансиях с JobInventory.com с использованием Python.
Сначала мы будем использовать библиотеку requests
для отправки GET-запроса на веб-сайт и получения HTML-контента. Затем мы будем использовать BeautifulSoup
для разбора HTML и извлечения соответствующей информации о вакансиях, такой как название вакансии, название компании и описание вакансии.
Далее мы изучим, как использовать модуль регулярных выражений Python для очистки извлеченных данных и их подготовки для дальнейшего анализа. Мы также рассмотрим, как сохранить данные в CSV-файл для последующего использования.
Но это еще не все! Мы также погрузимся в продвинутые техники парсинга, такие как обработка пагинации и динамически загружаемого контента. И, в качестве бонуса, мы покажем вам, как использовать библиотеки обработки естественного языка Python для извлечения ключевых слов и анализа описаний вакансий.
Итак, возьмите чашку кофе и готовьтесь погрузиться в мир парсинга веб-страниц с помощью Python. По окончании этого учебника у вас будут навыки парсинга объявлений о вакансиях на JobInventory.com и не только!
Реализация доступна на GitHub:
Парсинг вакансий с сайта jobinventory.com
Установка
Для начала парсинга вакансий нам понадобятся некоторые пакеты Python. Откройте терминал или командную строку и выполните следующую команду:
pip install requests beautifulsoup4 pandas
Эти пакеты позволят нам отправлять HTTP-запросы, парсить HTML и сохранять полученные данные в CSV-файле.
Парсинг одной страницы
Теперь, когда у нас установлены необходимые зависимости, давайте перейдем к коду.
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
# Определение поискового запроса и местоположения
search_query = "data scientist"
location = "New York City, NY"
# Формирование URL
url = f"http://www.jobinventory.com/search?q={search_query}&l={location}"
# Отправка GET-запроса по URL
response = requests.get(url)
# Парсинг HTML-контента с помощью BeautifulSoup
soup = BeautifulSoup(response.content, "html.parser")
# Поиск всех вакансий на странице
job_listings = soup.find_all("li", class_="resultBlock")
# Определение пустых списков для хранения деталей вакансий
titles = []
companies = []
locations = []
descriptions = []
# Перебор каждой вакансии и извлечение соответствующих деталей
for job in job_listings:
title = job.find("div", class_="title").text.strip()
company = job.find("span", class_="company").text.strip()
location = (
job.find("div", class_="state").text.split("\xa0-\xa0")[-1].strip()
)
description = job.find("div", class_="description").text.strip()
titles.append(title)
companies.append(company)
locations.append(location)
descriptions.append(description)
# Очистка описаний вакансий с использованием регулярных выражений
regex = re.compile(r"\s+")
clean_descriptions = [regex.sub(" ", d).split(" - ")[1] for d in descriptions]
# Создание объекта DataFrame для хранения деталей вакансий
df = pd.DataFrame(
{
"Название": titles,
"Компания": companies,
"Местоположение": locations,
"Описание": clean_descriptions,
}
)
# Экспорт DataFrame в CSV-файл
df.to_csv("job_listings.csv", index=False)
print("Парсинг завершен! Результаты сохранены в файле \"job_listings.csv\".")
df
В этом коде мы сначала определяем переменные search_query и location. Затем мы формируем URL, объединяя эти переменные с базовым URL JobInventory.com.
Затем мы отправляем GET-запрос по URL с использованием библиотеки requests и парсим HTML-контент с помощью BeautifulSoup. Мы находим все вакансии на странице, ища элементы li с классом resultBlock.
Далее мы определяем пустые списки для хранения деталей вакансий и перебираем каждую вакансию, извлекая соответствующие детали с помощью метода find. Мы добавляем извлеченные детали в соответствующие списки.
Для очистки описаний вакансий мы определяем шаблон регулярного выражения, который соответствует одному или более символам пробела, и используем метод sub для замены их на один пробел.
Наконец, мы создаем объект DataFrame для хранения деталей вакансий и экспортируем его в CSV-файл с помощью метода to_csv.
И вот! Всего несколькими строками кода на Python вы можете выполнить парсинг вакансий с JobInventory.com и сохранить их в CSV-файл для дальнейшего анализа.
Но что, если на сайте есть несколько страниц с вакансиями?
Парсинг нескольких страниц
Мы можем обработать пагинацию, изменив наш код следующим образом:
import requests
from bs4 import BeautifulSoup
import re
import pandas as pd
# Определите поисковый запрос и местоположение
search_query = "data scientist"
location = "Нью-Йорк, США"
# Составьте базовый URL
base_url = "http://www.jobinventory.com"
# Определите пустые списки для хранения информации о вакансиях
titles = []
companies = []
locations = []
descriptions = []
# Проходите по каждой странице списка вакансий
max_pages = 5
page_num = 1
while page_num <= max_pages:
# Составьте URL для текущей страницы
url = f"{base_url}/search?q={search_query}&l={location}&start={page_num}"
# Отправьте GET-запрос на URL
response = requests.get(url)
# Разберите HTML-контент с помощью BeautifulSoup
soup = BeautifulSoup(response.content, "html.parser")
# Найдите все вакансии на странице
job_listings = soup.find_all("li", class_="resultBlock")
# Если на текущей странице нет вакансий, значит мы достигли конца списка
if not job_listings:
break
# Проходите по каждой вакансии и извлекайте соответствующую информацию
for job in job_listings:
title = job.find("div", class_="title").text.strip()
company = job.find("span", class_="company").text.strip()
location = (
job.find("div", class_="state").text.split("\xa0-\xa0")[-1].strip()
)
description = job.find("div", class_="description").text.strip()
titles.append(title)
companies.append(company)
locations.append(location)
descriptions.append(description)
# Увеличивайте номер страницы
page_num += 1
# Очистите описания вакансий с использованием регулярных выражений
regex = re.compile(r"\s+")
clean_descriptions = [regex.sub(" ", d).split(" - ")[1] for d in descriptions]
# Создайте объект DataFrame Pandas для хранения информации о вакансиях
df = pd.DataFrame(
{
"Название": titles,
"Компания": companies,
"Местоположение": locations,
"Описание": clean_descriptions,
}
)
# Экспортируйте объект DataFrame в CSV-файл
df.to_csv("job_listings_multiple.csv", index=False)
print("Парсинг завершен! Проверьте файл 'job_listings_multiple.csv' для результатов.")
df
В этом измененном коде мы сначала определяем переменные поискового запроса и местоположения, а также базовый URL JobInventory.com. Мы также определяем пустые списки для хранения информации о вакансиях.
Затем мы проходим по каждой странице списка вакансий, до, например, 5 страниц, увеличивая параметр start
в URL. Мы проверяем, есть ли вакансии на текущей странице, и если нет, мы выходим из цикла.
Затем мы проходим по каждой вакансии на текущей странице, извлекаем соответствующую информацию с помощью метода find
и добавляем ее в соответствующие списки.
После того, как мы спарсили все вакансии, мы очищаем описания вакансий с помощью регулярных выражений, создаем объект DataFrame Pandas для хранения информации о вакансиях и экспортируем его в CSV-файл.
И вот! С помощью этих изменений мы можем парсить список вакансий с JobInventory.com на нескольких страницах.
Удачного парсинга!