Python Kullanarak Glassdoor Verileri Nasıl Kazınır?

Yorumlar: 0

Glassdoor, hem iş arayan hem de işe almak isteyen kişiler için maaş bilgileri, işveren değerlendirmeleri ve iş başvuruları dahil olmak üzere geniş bir yelpazede bilgi sağlayan en iyi platformlardan biridir. Bu kılavuzda, Python ve Playwright kullanarak Glassdoor'dan iş ilanlarını kazıma sürecini inceleyeceğiz. Playwright burada çok önemlidir çünkü Glassdoor, geleneksel kazıma kütüphanelerini işaretleyebilen ve engelleyebilen güçlü anti-bot önlemleri kullanır. Playwright ile gerçek bir tarayıcıyı simüle edebilir ve proxy'ler ekleyerek bu algılama sistemlerini atlatmamıza yardımcı olabiliriz.

Glassdoor'un güçlü kazıma önleme mekanizmaları nedeniyle, requests gibi kütüphanelerle yapılan doğrudan talepler IP engelleme veya CAPTCHA zorluklarına yol açabilir. Playwright, bir tarayıcıyı otomatikleştirmemize olanak tanıyarak etkileşimlerimizi daha insan benzeri hale getirir. Proxy'ler ve tarayıcı başlıkları ekleyerek tespit edilmeyi daha da önleyebiliriz.

Gereksinimler

Başlamak için Playwright'ı ve HTML ayrıştırma için lxml kütüphanesini yüklemeniz gerekir. Bunları aşağıdaki gibi yükleyebilirsiniz:


pip install playwright lxml
playwright install

Scraping Glassdoor iş ilanları

Playwright ile sayfayı yüklemekten iş ayrıntılarını çıkarmaya ve verileri bir CSV dosyasına kaydetmeye kadar her adımı inceleyeceğiz.

Adım 1. Tarayıcıyı ayarlama ve istek yapma

İlk olarak, Glassdoor'a bağlanmak için Playwright'ı bir proxy ile kurun. Bu, engellenmeyi önlemeye yardımcı olur ve tarayıcının sayfayı gerçek bir kullanıcı siteyi ziyaret ediyormuş gibi yüklemesini sağlar.


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

# Sayfa içeriğini almak için işlevi çağırın
html_content = await scrape_job_listings()

Adım 2. HTML'yi ayrıştırma ve verileri çıkarma

Sayfayı yükledikten sonra, HTML içeriğini ayrıştırmak ve ilgili iş bilgilerini çıkarmak için lxml kullanın. Her bir iş ilanı için iş unvanını, konumu, maaşı ve diğer ayrıntıları nasıl ayrıştıracağınız aşağıda açıklanmıştır:


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)

Adım 3. Verileri bir CSV dosyasına kaydetme

İş ayrıntılarını çıkardıktan sonra, kolay veri analizi için bunları bir CSV dosyasına kaydedebiliriz.


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)

Tamamlanmış kod


import csv
from playwright.async_api import async_playwright
from lxml.html import fromstring

async def scrape_job_listings():
    # Algılanmayı önlemek için Playwright tarayıcısını proxy ile ayarlama
    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)
        
        # Sayfa içeriğini alın ve tarayıcıyı kapatın
        content = await page.content()
        await browser.close()
        
        # İçeriği lxml ile ayrıştırma
        parser = fromstring(content)
        job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
        
        # Her bir iş ilanı için verileri ayıklayın
        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)
    
        # Verileri bir CSV dosyasına kaydedin
        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)

# Kazıma işlevini çalıştırın
import asyncio
asyncio.run(scrape_job_listings())

Kodun Tamamının Açıklanması:

  1. Proxy ile Tarayıcı Kurulumu: Kod, Playwright ile bir tarayıcı oturumu başlatır ve insan tarama davranışını taklit etmek için bir proxy içerir. Headless=False ayarı, tarayıcı penceresinin açık kalmasını sağlayarak bot tespitini atlatmaya daha fazla yardımcı olabilir.
  2. İş İlanları Sayfasına Gitme: Komut dosyası, Amerika Birleşik Devletleri'ndeki yazılım mühendisliği işleri için Glassdoor iş ilanları URL'sini ziyaret eder.
  3. İçeriğin Ayrıştırılması: İş verileri HTML ayrıştırma için lxml kullanılarak çıkarılır. İş unvanını, konumunu, maaşını, iş bağlantısını, şirket adını ve kolay uygulanabilir bir iş olup olmadığını yakalıyoruz.
  4. CSV'ye kaydetme: Tüm verileri ayıkladıktan sonra, komut dosyası bunları her bir özellik için sütunlar içeren glassdoor_job_listings.csv adlı bir CSV dosyasına kaydeder.

Classdoor'un hizmet koşullarına saygı duymak

Glassdoor veya başka bir web sitesini kazırken, sorumlu kazıma uygulamalarını takip etmek çok önemlidir:

  • Hız Sınırlarına Saygı Gösterin: İstekler arasında gecikmeler uygulayarak sunucuyu bunaltmaktan kaçının.
  • Dönüşümlü Proxy'ler kullanın: Proxy'leri ve IP'leri döndürerek yasaklanma riskini en aza indirin.
  • Hizmet Şartlarına Uyun: Web sitesinin hizmet şartlarını düzenli olarak gözden geçirin ve bunları ihlal eden eylemlerden kaçının.

Python ve Playwright kullanarak Glassdoor'un verilerini nasıl kazıyacağınızı öğrendiğinizde, iş ilanları toplama yeteneğinizi kolayca geliştireceksiniz. Bu teknik, proxy kullanımı ve uygun başlıklarla birleştirildiğinde Glassdoor tarafından engellenme riskini ortadan kaldırmada etkilidir. Glassdoor sunucularının çökmesini önlemek için etik kazıma politikalarına da dikkat etmeniz gerekir. Bu önlemlere uyarak, artık Glassdoor'dan kendi kullanımınız veya şirketinizin kullanımı için yararlı istihdam bilgilerini toplayabilir ve işleyebilirsiniz.

Yorumlar:

0 yorumlar