В даній інструкції розглядається процес вилучення даних про вакансії з платформи Glassdoor, яка надає цінну інформацію для претендентів і роботодавців. Для виконання цієї задачі застосовується Python разом із Playwright, щоб ефективно обходити заходи захисту від скрапінгу, які використовує Glassdoor. Особливо актуальний Playwright, оскільки він дає змогу імітувати поведінку справжнього користувача і застосовувати проксі для зниження ризику блокування.
Використання прямих запитів через бібліотеку requests часто закінчується блокуванням IP-адреси або викликом CAPTCHA. З Playwright можна автоматизувати дії в браузері, що робить взаємодію більш природною і менш схильною до виявлення. Зі свого боку, застосування проксі та специфічних заголовків браузера збільшує шанси на успішний скрапінг даних без ризику бути заблокованим.
Для початку роботи потрібно встановити Playwright і бібліотеку lxml для парсингу HTML. Встановлення може бути виконано такими командами:
pip install playwright lxml
playwright install
У цьому розділі будуть детально розглянуті всі етапи: від завантаження сторінки за допомогою Playwright до вилучення деталей про вакансії та збереження даних у файл CSV.
Для початку необхідно налаштувати Playwright з використанням проксі для підключення до Glassdoor. Це допоможе уникнути блокувань і дасть змогу браузеру завантажувати сторінку, так, наче б її відвідував реальний користувач.
from playwright.async_api import async_playwright
from lxml.html import fromstring
async def scrape_job_listings():
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto('https ссылка', timeout=60000)
content = await page.content()
await browser.close()
return content
# Виклик функції для отримання вмісту сторінки
html_content = await scrape_job_listings()
Після завантаження сторінки використовуйте lxml для парсингу HTML-контенту та вилучення релевантної інформації про вакансії. Нижче наведено приклад як можна проаналізувати назву вакансії, місце розташування, зарплату та інші деталі для кожної вакансії:
parser = fromstring(html_content)
job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
jobs_data = []
for element in job_posting_elements:
job_title = element.xpath('.//a[@data-test="job-title"]/text()')[0]
job_location = element.xpath('.//div[@data-test="emp-location"]/text()')[0]
salary = ' '.join(element.xpath('.//div[@data-test="detailSalary"]/text()')).strip()
job_link = element.xpath('.//a[@data-test="job-title"]/@href')[0]
easy_apply = bool(element.xpath('.//div[@data-role-variant="featured"]'))
company = element.xpath('.//span[@class="EmployerProfile_compactEmployerName__LE242"]/text()')[0]
job_data = {
'company': company,
'job_title': job_title,
'job_location': job_location,
'job_link': job_link,
'salary': salary,
'easy_apply': easy_apply
}
jobs_data.append(job_data)
Після вилучення інформації про вакансії можна зберегти її у файл CSV для зручності аналізу даних.
import csv
with open('glassdoor_job_listings.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=['company', 'job_title', 'job_location', 'job_link', 'salary', 'easy_apply'])
writer.writeheader()
writer.writerows(jobs_data)
import csv
from playwright.async_api import async_playwright
from lxml.html import fromstring
async def scrape_job_listings():
# Налаштування браузера Playwright із проксі для уникнення виявлення
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto('https://www.glassdoor.com/Job/united-states-software-engineer-jobs-SRCH_IL.0,13_IN1_KO14,31.htm', timeout=60000)
# Отримання вмісту сторінки та закриття браузера
content = await page.content()
await browser.close()
# Парсинг вмісту за допомогою lxml
parser = fromstring(content)
job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
# Витяг даних для кожної вакансії
jobs_data = []
for element in job_posting_elements:
job_title = element.xpath('.//a[@data-test="job-title"]/text()')[0]
job_location = element.xpath('.//div[@data-test="emp-location"]/text()')[0]
salary = ' '.join(element.xpath('.//div[@data-test="detailSalary"]/text()')).strip()
job_link = "https://www.glassdoor.com" + element.xpath('.//a[@data-test="job-title"]/@href')[0]
easy_apply = bool(element.xpath('.//div[@data-role-variant="featured"]'))
company = element.xpath('.//span[@class="EmployerProfile_compactEmployerName__LE242"]/text()')[0]
job_data = {
'company': company,
'job_title': job_title,
'job_location': job_location,
'job_link': job_link,
'salary': salary,
'easy_apply': easy_apply
}
jobs_data.append(job_data)
# Збереження даних у файл CSV
with open('glassdoor_job_listings.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=['company', 'job_title', 'job_location', 'job_link', 'salary', 'easy_apply'])
writer.writeheader()
writer.writerows(jobs_data)
# Запуск функції скрапінгу
import asyncio
asyncio.run(scrape_job_listings())
Пояснення коду:
Під час скрапінгу Glassdoor або будь-якого іншого сайту вкрай важливо дотримуватися відповідальних практик скрапінгу:
Опанувавши методику скрапінгу даних з Glassdoor з використанням Python і Playwright, можна значно поліпшити свої можливості зі збору списку вакансій. Ця техніка, в поєднанні з використанням проксі та відповідних заголовків, ефективно усуває ризик блокування з боку Glassdoor. Також необхідно враховувати політику етичного скрапінгу, щоб уникнути перевантаження серверів Glassdoor. Дотримуючись цих заходів, тепер можна збирати та обробляти корисну інформацію про працевлаштування з Glassdoor для власних потреб або компанії.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Коментарі: 0