LinkedIn verilerini kazımak çeşitli nedenlerden dolayı inanılmaz derecede değerli olabilir:
Makale, ilk etapta proxy'ler ve başlıklar aracılığıyla tespit edilmekten kaçınmanın önemi de dahil olmak üzere önemli teknik ve stratejileri vurgulayacaktır. HTTP istekleri yapmak için requests kütüphanesi kullanılırken HTML içeriğini ayrıştırmak için lxml kullanılacaktır.
Başlamadan önce, makinenizde Python'un kurulu olduğundan emin olun.
Pip kullanarak gerekli kütüphaneleri yükleyin:
pip install requests
pip install lxml
İşte Python kullanarak LinkedIn iş ilanlarını kazımak için kapsamlı bir kod örneği:
Birkaç Python kütüphanesine ihtiyacımız olacak:
import requests
from lxml import html
import csv
import random
Kazımak istediğiniz LinkedIn iş arama URL'sini tanımlayarak başlayın.
url = 'https link'
LinkedIn'i etkili bir şekilde kazımak için, gerçek bir tarayıcıdan gelen istekleri taklit etmek üzere doğru başlıkları, özellikle de User-Agent başlığını kullanmak çok önemlidir.
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
Günümüz proxy sağlayıcıları genellikle dahili rotasyonu destekler, yani IP adreslerini sizin için otomatik olarak döndürürler. Bu, bir listeden proxy'leri manuel olarak seçme ihtiyacını ortadan kaldırır. Ancak, örnek olması açısından, gerekirse proxy rotasyonunu şu şekilde1 gerçekleştirebilirsiniz:
proxies = {
'http': random.choice(proxies),
'https': random.choice(proxies)
}
Başarılı LinkedIn kazıma, gerçek bir tarayıcının davranışını taklit eden başlıkların doğru şekilde ayarlanmasına bağlıdır. Düzgün yapılandırılmış başlıklar yalnızca anti-bot koruma sistemlerini atlatmaya yardımcı olmakla kalmaz, aynı zamanda kazıma faaliyetlerinizin engellenme olasılığını da azaltır.
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'dnt': '1',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
İş ilanı bilgilerini etkili bir şekilde toplamak ve saklamak için, bir veri deposunu başlatarak başlamalısınız. Python'da bu genellikle boş bir liste oluşturmayı içerir. Bu liste, HTML içeriğinden çıkarıldıkça iş ayrıntılarını ekleyebileceğiniz bir depolama kabı görevi görecektir. Bu yöntem, bilgilerin sistematik olarak toplanmasını ve daha sonraki işlemler veya analizler için kolayca erişilebilir olmasını sağlar.
job_details = []
Bir HTTP GET isteği gönderdikten sonra, bir sonraki adım lxml kütüphanesini kullanarak HTML içeriğini ayrıştırmaktır. Bu, HTML yapısı içinde gezinmemizi ve ayıklamak istediğimiz verileri tanımlamamızı sağlayacaktır.
# IP yetkilendirme yöntemiyle rastgele User-Agent ve proxy ayarlama
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': IP:PORT,
'https': IP:PORT
}
# URL'ye bir HTTP GET isteği gönderin
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)
HTML içeriği ayrıştırıldıktan sonra, XPath sorgularını kullanarak unvan, şirket adı, konum ve iş URL'si gibi belirli iş ayrıntılarını çıkarabiliriz. Bu ayrıntılar bir sözlükte saklanır ve bir listeye eklenir.
# HTML içeriğinden iş ayrıntılarını çıkarın
for job in parser.xpath('//ul[@class="jobs-search__results-list"]/li'):
title = ''.join(job.xpath('.//div/a/span/text()')).strip()
company = ''.join(job.xpath('.//div/div[2]/h4/a/text()')).strip()
location = ''.join(job.xpath('.//div/div[2]/div/span/text()')).strip()
job_url = job.xpath('.//div/a/@href')[0]
job_detail = {
'title': title,
'company': company,
'location': location,
'job_url': job_url
}
job_details.append(job_detail)
İş verilerini topladıktan sonra bir CSV dosyasına kaydedin.
with open('linkedin_jobs.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['title', 'company', 'location', 'job_url']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for job_detail in job_details:
writer.writerow(job_detail)
İşte yukarıdaki tüm bölümleri birleştiren tam kod:
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.by import By
import csv
# Proxy sunucu adresini kullanıcı adı ve parola ile belirtin
proxy_address = ""
proxy_username = ""
proxy_password = ""
# Proxy ve kimlik doğrulama ile Chrome seçeneklerini ayarlama
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
# Selenium-wire ile bir WebDriver örneği oluşturma
driver = wiredriver.Chrome(options=chrome_options)
url = 'https link'
# Selenium otomasyonunuzu selenium-wire'ın gelişmiş özellikleriyle gerçekleştirin
driver.get(url)
job_details = []
all_elements = driver.find_elements(By.XPATH,
'//*[@id="main-content"]/section/ul/li')
for i in all_elements:
title = i.find_element(By.XPATH,
'.//div/div/h3').text
company = i.find_element(By.XPATH, './/div/div[2]/h4/a').text
location = i.find_element(By.XPATH, './/div/div[2]/div/span').text
job_url = i.find_element(By.XPATH,
'.//div/a').get_attribute('href')
job_detail = {
'title': title,
'company': company,
'location': location,
'job_url': job_url
}
job_details.append(job_detail)
with open('linkedin_jobs.csv', 'w', newline='', encoding='utf-8') as csvfile:
fieldnames = ['title', 'company', 'location', 'job_url']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for job_detail in job_details:
writer.writerow(job_detail)
driver.quit()
Python kullanarak requests ve lxml kütüphaneleri ile LinkedIn'den veri ayıklamak, iş piyasasını analiz etmek ve personel almak için güçlü bir yol sunar. Sorunsuz bir kazıma süreci sağlamak için, yüksek hızlara sahip veri merkezi proxy'lerinin yanı sıra otomatik eylemlerin engellenme riskini azaltan daha yüksek güven faktörüne sahip ISP proxy'leri kullanılır.
Yorumlar: 0