Cara Mengikis Data Glassdoor Menggunakan Python

Komentar: 0

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.

Persyaratan

Untuk memulai, Anda perlu menginstal Playwright dan pustaka lxml untuk penguraian HTML. Anda dapat menginstalnya sebagai berikut:


pip install playwright lxml
playwright install

Mengikis daftar pekerjaan Glassdoor

Kita akan membahas setiap langkah, mulai dari memuat halaman dengan Playwright hingga mengekstrak detail pekerjaan dan menyimpan data ke dalam file CSV.

Langkah 1. Menyiapkan peramban dan membuat permintaan

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()

Langkah 2. Mengurai HTML dan mengekstrak data

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)

Langkah 3. Menyimpan data ke file CSV

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)

Kode lengkap


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:

  1. Pengaturan Peramban dengan Proksi: Kode ini memulai sesi peramban dengan Playwright, dengan menggunakan proksi untuk meniru perilaku penjelajahan manusia. Pengaturan headless=False memungkinkan jendela peramban tetap terbuka, yang selanjutnya dapat membantu mem-bypass deteksi bot.
  2. Menavigasi ke Halaman Daftar Pekerjaan: Skrip mengunjungi URL daftar pekerjaan Glassdoor untuk pekerjaan rekayasa perangkat lunak di Amerika Serikat.
  3. Mengurai Konten: Data pekerjaan diekstraksi menggunakan lxml untuk penguraian HTML. Kami menangkap judul pekerjaan, lokasi, gaji, tautan pekerjaan, nama perusahaan, dan jika itu adalah pekerjaan yang mudah dilamar.
  4. Menyimpan ke CSV: Setelah mengekstrak semua data, skrip menyimpannya ke file CSV, glassdoor_job_listings.csv, dengan kolom untuk setiap atribut.

Menghormati ketentuan layanan Glassdoor

Saat melakukan scraping Glassdoor atau situs web lainnya, penting untuk mengikuti praktik scraping yang bertanggung jawab:

  • Hormati Batas Kecepatan: Hindari membebani server dengan menerapkan penundaan di antara permintaan.
  • Gunakan Proksi Berputar: Meminimalkan risiko diblokir dengan merotasi proksi dan IP.
  • Mematuhi Ketentuan Layanan: Tinjau persyaratan layanan situs web secara teratur dan hindari tindakan yang melanggarnya.

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 komentar