Skrobanie danych LinkedIn może być niezwykle cenne z kilku powodów:
W artykule podkreślone zostaną ważne techniki i strategie, w tym znaczenie unikania wykrywania za pośrednictwem serwerów proxy i nagłówków. Biblioteka requests będzie używana do wykonywania żądań HTTP, podczas gdy lxml będzie wykorzystywany do analizowania zawartości HTML.
Zanim zaczniesz, upewnij się, że masz zainstalowany Python na swoim komputerze.
Zainstaluj wymagane biblioteki za pomocą pip:
pip install requests
pip install lxml
Oto kompleksowy przykład kodu do skrobania ofert pracy LinkedIn za pomocą Pythona:
Będziemy potrzebować kilku bibliotek Pythona:
import requests
from lxml import html
import csv
import random
Zacznij od zdefiniowania adresu URL wyszukiwania ofert pracy LinkedIn, który chcesz zeskrobać.
url = 'https link'
Aby skutecznie skrobać LinkedIn, ważne jest, aby używać prawidłowych nagłówków, zwłaszcza nagłówka User-Agent, aby naśladować żądania z rzeczywistej przeglądarki.
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'
]
Współcześni dostawcy proxy często obsługują rotację wewnętrzną, co oznacza, że automatycznie zmieniają adresy IP. Eliminuje to potrzebę ręcznego wybierania serwerów proxy z listy. Jednak dla celów ilustracyjnych, oto jak1 można obsłużyć rotację proxy w razie potrzeby:
proxies = {
'http': random.choice(proxies),
'https': random.choice(proxies)
}
Skuteczny scraping LinkedIn opiera się na prawidłowej konfiguracji nagłówków, które naśladują zachowanie prawdziwej przeglądarki. Prawidłowo skonfigurowane nagłówki nie tylko pomagają w omijaniu systemów ochrony przed botami, ale także zmniejszają szanse na zablokowanie działań związanych ze skrobaniem.
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',
}
Aby skutecznie gromadzić i przechowywać informacje o ofertach pracy, należy rozpocząć od zainicjowania magazynu danych. W języku Python zazwyczaj polega to na utworzeniu pustej listy. Lista ta będzie służyć jako kontener do przechowywania danych, do którego można dodawać szczegóły ofert pracy w miarę ich wyodrębniania z treści HTML. Ta metoda zapewnia, że informacje są systematycznie gromadzone i łatwo dostępne do dalszego przetwarzania lub analizy.
job_details = []
Po wysłaniu żądania HTTP GET, następnym krokiem jest przeanalizowanie zawartości HTML przy użyciu biblioteki lxml. Pozwoli nam to poruszać się po strukturze HTML i zidentyfikować dane, które chcemy wyodrębnić.
# Ustaw losowy User-Agent i proxy z metodą autoryzacji IP
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': IP:PORT,
'https': IP:PORT
}
# Wyślij żądanie HTTP GET do adresu URL
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)
Po przeanalizowaniu zawartości HTML możemy wyodrębnić określone szczegóły oferty pracy, takie jak tytuł, nazwa firmy, lokalizacja i adres URL oferty pracy za pomocą zapytań XPath. Szczegóły te są przechowywane w słowniku i dołączane do listy.
# Wyodrębnianie szczegółów zadania z zawartości 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)
Po zebraniu danych zadania zapisz je w pliku 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)
Oto kompletny kod, łączący wszystkie powyższe sekcje:
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.by import By
import csv
# Określ adres serwera proxy wraz z nazwą użytkownika i hasłem.
proxy_address = ""
proxy_username = ""
proxy_password = ""
# Skonfiguruj opcje Chrome z proxy i uwierzytelnianiem
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
# Utwórz instancję WebDriver za pomocą selenium-wire
driver = wiredriver.Chrome(options=chrome_options)
url = 'https link'
# Wykonaj automatyzację Selenium z rozszerzonymi możliwościami 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()
Wyodrębnianie danych z LinkedIn przy użyciu Pythona z bibliotekami requests i lxml oferuje potężny sposób na analizę rynku pracy i rekrutację personelu. Aby zapewnić płynny proces skrobania, wykorzystywane są serwery proxy centrów danych o dużej szybkości, a także serwery proxy dostawców usług internetowych o wyższym współczynniku zaufania, co zmniejsza ryzyko blokowania zautomatyzowanych działań.
Komentarze: 0