Panduan untuk mengikis data LinkedIn dengan Python

Komentar: 0

Mengikis data LinkedIn dapat menjadi sangat berharga karena beberapa alasan:

  • Analisis pasar kerja: menganalisis tren dalam daftar lowongan kerja, seperti keahlian dan industri yang paling banyak diminati;
  • Rekrutmen: mengumpulkan data tentang lowongan pekerjaan untuk menginformasikan strategi perekrutan;
  • Penelitian pesaing: memantau pola perekrutan dan strategi pesaing.

Artikel ini akan menekankan teknik dan strategi penting, termasuk pentingnya menghindari deteksi melalui proxy dan header sejak awal. Pustaka permintaan akan digunakan untuk membuat permintaan HTTP sementara lxml akan digunakan untuk mem-parsing konten HTML.

Menyiapkan lingkungan

Sebelum memulai, pastikan Anda telah menginstal Python di mesin Anda.

Instal pustaka yang diperlukan menggunakan pip:


pip install requests
pip install lxml

Memulai dengan pengikis

Berikut adalah contoh kode komprehensif untuk mengikis daftar lowongan kerja LinkedIn menggunakan Python:

Mengimpor pustaka

Kita akan membutuhkan beberapa pustaka Python:

  • requests: Untuk membuat permintaan HTTP untuk mengambil halaman web.
  • lxml: Untuk mengurai konten HTML.
  • csv: Untuk menulis data yang diekstrak ke file CSV.

import requests
from lxml import html
import csv
import random

Tentukan URL pencarian pekerjaan

Mulailah dengan menentukan URL pencarian kerja LinkedIn yang ingin Anda gali.


url = 'https link'

String dan proksi agen-pengguna

Untuk mengikis LinkedIn secara efektif, sangat penting untuk menggunakan tajuk yang benar, terutama tajuk Agen-Pengguna, untuk meniru permintaan dari peramban yang sebenarnya.


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'
]

Penyedia proxy modern sering kali mendukung rotasi internal, yang berarti mereka secara otomatis merotasi alamat IP untuk Anda. Hal ini menghilangkan kebutuhan untuk memilih proxy secara manual dari daftar. Namun, untuk tujuan ilustrasi, berikut ini adalah cara Anda menangani rotasi proxy jika diperlukan:


proxies = {
    'http': random.choice(proxies),
    'https': random.choice(proxies)
}

Header untuk permintaan

Keberhasilan scraping LinkedIn bergantung pada pengaturan header yang benar yang meniru perilaku browser yang sebenarnya. Header yang dikonfigurasi dengan benar tidak hanya membantu dalam menghindari sistem perlindungan anti-bot, namun juga mengurangi kemungkinan aktivitas scraping Anda diblokir.


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',
}

Inisialisasi Penyimpanan Data

Untuk mengumpulkan dan menyimpan informasi lowongan pekerjaan secara efektif, Anda harus memulai dengan menginisialisasi penyimpanan data. Dalam Python, ini biasanya melibatkan pembuatan daftar kosong. Daftar ini akan berfungsi sebagai wadah penyimpanan di mana Anda dapat menambahkan detail pekerjaan saat diekstrak dari konten HTML. Metode ini memastikan bahwa informasi dikumpulkan secara sistematis dan mudah diakses untuk pemrosesan atau analisis lebih lanjut.

job_details = []

Mengurai konten HTML

Setelah mengirimkan permintaan HTTP GET, langkah selanjutnya adalah mengurai konten HTML menggunakan pustaka lxml. Hal ini akan memungkinkan kita untuk menavigasi struktur HTML dan mengidentifikasi data yang ingin kita ekstrak.


# Mengatur Agen-Pengguna dan proxy secara acak dengan metode otorisasi IP
headers['user-agent'] = random.choice(user_agents)
proxies = {
    'http': IP:PORT,
    'https': IP:PORT
}

# Kirim permintaan HTTP GET ke URL
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)

Mengekstrak data pekerjaan

Setelah konten HTML diuraikan, kita dapat mengekstrak detail pekerjaan tertentu seperti jabatan, nama perusahaan, lokasi, dan URL pekerjaan menggunakan kueri XPath. Rincian ini disimpan dalam sebuah kamus dan ditambahkan ke sebuah daftar.


# Mengekstrak detail pekerjaan dari konten HTML
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)

Menyimpan data ke CSV

Setelah mengumpulkan data pekerjaan, simpan ke file CSV.


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)

Kode lengkap

Berikut ini adalah kode lengkapnya, yang menggabungkan semua bagian di atas:


from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.by import By
import csv

# Tentukan alamat server proxy dengan nama pengguna dan kata sandi
proxy_address = ""
proxy_username = ""
proxy_password = ""

# Mengatur opsi Chrome dengan proxy dan autentikasi
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')

# Membuat instans WebDriver dengan selenium-wire
driver = wiredriver.Chrome(options=chrome_options)

url = 'https link'

# Lakukan otomatisasi Selenium Anda dengan kemampuan yang disempurnakan dari selenium-wire
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()

Mengekstrak data dari LinkedIn menggunakan Python dengan pustaka request dan lxml menawarkan cara yang ampuh untuk menganalisis pasar kerja dan merekrut personel. Untuk memastikan proses penggalian yang lancar, proxy pusat data dengan kecepatan tinggi digunakan, serta proxy ISP dengan faktor kepercayaan yang lebih tinggi, yang mengurangi risiko pemblokiran pada tindakan otomatis.

Komentar:

0 komentar