Glassdoor adalah salah satu platform terbaik yang menyediakan berbagai macam informasi untuk orang-orang yang mencari pekerjaan dan yang ingin mempekerjakan mereka, termasuk informasi gaji, ulasan pemberi kerja, dan lamaran pekerjaan. Dalam panduan ini, kita akan membahas proses penggalian daftar pekerjaan dari Glassdoor menggunakan Python dan Playwright. Playwright sangat penting di sini karena Glassdoor menggunakan langkah-langkah anti-bot yang kuat, yang dapat menandai dan memblokir perpustakaan scraping tradisional. Dengan Playwright, kita dapat mensimulasikan peramban sungguhan dan menyertakan proksi, membantu kita melewati sistem pendeteksian ini.
Karena mekanisme anti-scraping Glassdoor yang kuat, permintaan langsung dengan pustaka seperti permintaan dapat menyebabkan pemblokiran IP atau tantangan CAPTCHA. Playwright memungkinkan kita untuk mengotomatisasi peramban, membuat interaksi kita lebih mirip manusia. Dengan menambahkan proksi dan header peramban, kita dapat menghindari deteksi lebih lanjut.
Untuk memulai, Anda perlu menginstal Playwright dan pustaka lxml untuk penguraian HTML. Anda dapat menginstalnya sebagai berikut:
pip install playwright lxml
playwright install
Kita akan membahas setiap langkah, mulai dari memuat halaman dengan Playwright hingga mengekstrak detail pekerjaan dan menyimpan data ke dalam file CSV.
Pertama, siapkan Playwright dengan proxy untuk terhubung ke Glassdoor. Hal ini membantu mencegah pemblokiran dan memungkinkan peramban untuk memuat halaman seolah-olah pengguna yang sebenarnya mengunjungi situs tersebut.
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
# Panggil fungsi untuk mengambil konten halaman
html_content = await scrape_job_listings()
Setelah memuat halaman, gunakan lxml untuk mem-parsing konten HTML dan mengekstrak informasi pekerjaan yang relevan. Berikut ini cara mengurai jabatan, lokasi, gaji, dan detail lainnya untuk setiap daftar pekerjaan:
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)
Setelah kita mengekstrak detail pekerjaan, kita dapat menyimpannya ke dalam file CSV untuk memudahkan analisis data.
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():
# Mengatur browser Playwright dengan proxy untuk menghindari deteksi
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)
# Mengambil konten halaman dan menutup browser
content = await page.content()
await browser.close()
# Mengurai konten dengan lxml
parser = fromstring(content)
job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
# Ekstrak data untuk setiap daftar pekerjaan
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)
# Menyimpan data ke file 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)
# Menjalankan fungsi pengikisan
import asyncio
asyncio.run(scrape_job_listings())
Penjelasan Kode Etik Lengkap:
Saat melakukan scraping Glassdoor atau situs web lainnya, penting untuk mengikuti praktik scraping yang bertanggung jawab:
Jika Anda mengetahui cara mengikis data Glassdoor menggunakan Python dan Playwright, Anda akan dengan mudah meningkatkan kemampuan Anda untuk mengumpulkan daftar pekerjaan. Teknik ini, jika digabungkan dengan penggunaan proxy dan header yang tepat, efektif dalam menghilangkan risiko diblokir oleh Glassdoor. Anda juga perlu memperhatikan kebijakan pengikisan etis untuk mencegah crash pada server Glassdoor. Dengan mematuhi langkah-langkah ini, Anda sekarang dapat memanen serta memproses informasi ketenagakerjaan yang berguna dari Glassdoor untuk penggunaan Anda sendiri atau perusahaan Anda.
Komentar: 0