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.
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
Playwright ile sayfayı yüklemekten iş ayrıntılarını çıkarmaya ve verileri bir CSV dosyasına kaydetmeye kadar her adımı inceleyeceğiz.
İ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()
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)
İş 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)
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ı:
Glassdoor veya başka bir web sitesini kazırken, sorumlu kazıma uygulamalarını takip etmek çok önemlidir:
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