Glassdoor는 급여 정보, 고용주 리뷰, 입사 지원서 등 구직자와 채용 희망자 모두에게 다양한 정보를 제공하는 최고의 플랫폼 중 하나입니다. 이 가이드에서는 Python과 Playwright를 사용하여 Glassdoor에서 채용 공고를 스크랩하는 과정을 안내합니다. 여기서는 기존의 스크래핑 라이브러리에 플래그를 지정하고 차단할 수 있는 강력한 봇 방지 조치를 채택하고 있기 때문에 Playwright가 필수적입니다. Playwright를 사용하면 실제 브라우저를 시뮬레이션하고 프록시를 포함할 수 있어 이러한 탐지 시스템을 우회하는 데 도움이 됩니다.
Glassdoor의 강력한 스크래핑 방지 메커니즘으로 인해 라이브러리를 통한 직접 요청은 IP 차단 또는 캡차 문제로 이어질 수 있습니다. Playwright를 사용하면 브라우저를 자동화하여 보다 인간과 유사한 상호작용을 할 수 있습니다. 프록시와 브라우저 헤더를 추가하면 탐지를 더욱 피할 수 있습니다.
시작하려면 HTML 파싱을 위해 Playwright와 lxml 라이브러리를 설치해야 합니다. 다음과 같이 설치할 수 있습니다:
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 link', 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 또는 다른 웹사이트를 스크랩할 때는 책임감 있는 스크랩 관행을 따라야 합니다:
Python과 Playwright를 사용하여 Glassdoor의 데이터를 스크래핑하는 방법을 알면 채용공고를 수집하는 능력을 쉽게 향상시킬 수 있습니다. 이 기술을 프록시 및 적절한 헤더 사용과 결합하면 Glassdoor에 의해 차단될 위험을 제거하는 데 효과적입니다. 또한 윤리적 스크래핑 정책을 준수하여 Glassdoor의 서버가 다운되는 것을 방지해야 합니다. 이러한 조치를 준수하면 이제 Glassdoor에서 유용한 채용 정보를 수집하고 처리하여 본인 또는 회사의 용도로 사용할 수 있습니다.
댓글: 0