LinkedIn 데이터를 스크랩하는 것은 여러 가지 이유로 매우 유용할 수 있습니다:
이 글에서는 프록시와 헤더를 통한 탐지를 애초에 피하는 것의 중요성을 비롯한 중요한 기법과 전략을 강조합니다. 요청 라이브러리는 HTTP 요청을 만드는 데 사용되며, lxml은 HTML 콘텐츠를 파싱하는 데 사용됩니다.
시작하기 전에 컴퓨터에 Python이 설치되어 있는지 확인하세요.
pip를 사용하여 필요한 라이브러리를 설치합니다:
pip install requests
pip install lxml
다음은 Python을 사용하여 LinkedIn 구인 목록을 스크랩하는 포괄적인 코드 예제입니다:
몇 가지 Python 라이브러리가 필요합니다:
import requests
from lxml import html
import csv
import random
먼저 스크랩할 LinkedIn 구직 URL을 정의하세요.
url = 'https link'
LinkedIn을 효과적으로 스크랩하려면 올바른 헤더, 특히 사용자 에이전트 헤더를 사용하여 실제 브라우저의 요청을 모방하는 것이 중요합니다.
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'
]
최신 프록시 제공업체는 내부 로테이션을 지원하는 경우가 많기 때문에 IP 주소를 자동으로 로테이션합니다. 따라서 목록에서 프록시를 수동으로 선택할 필요가 없습니다. 하지만 필요한 경우 프록시 로테이션을 처리하는 방법1을 설명하기 위해 다음과 같이 설명합니다:
proxies = {
'http': random.choice(proxies),
'https': random.choice(proxies)
}
성공적인 LinkedIn 스크래핑은 실제 브라우저의 동작을 모방하는 헤더의 올바른 설정에 달려 있습니다. 헤더를 올바르게 구성하면 안티봇 보호 시스템을 우회하는 데 도움이 될 뿐만 아니라 스크래핑 활동이 차단될 가능성도 줄어듭니다.
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',
}
채용 공고 정보를 효과적으로 수집하고 저장하려면 먼저 데이터 저장소를 초기화해야 합니다. Python에서는 일반적으로 빈 목록을 생성합니다. 이 목록은 HTML 콘텐츠에서 추출한 채용 정보를 추가할 수 있는 저장소 역할을 합니다. 이 방법을 사용하면 정보를 체계적으로 수집하고 추가 처리 또는 분석을 위해 쉽게 액세스할 수 있습니다.
job_details = []
HTTP GET 요청을 보낸 후 다음 단계는 lxml 라이브러리를 사용하여 HTML 콘텐츠를 파싱하는 것입니다. 이렇게 하면 HTML 구조를 탐색하고 추출하려는 데이터를 식별할 수 있습니다.
# IP 인증 방법으로 임의의 사용자 에이전트 및 프록시를 설정합니다.
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': IP:PORT,
'https': IP:PORT
}
# URL로 HTTP GET 요청을 보냅니다.
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)
HTML 콘텐츠가 구문 분석되면 XPath 쿼리를 사용하여 직책, 회사 이름, 위치 및 작업 URL과 같은 특정 작업 세부 정보를 추출할 수 있습니다. 이러한 세부 정보는 사전에 저장되고 목록에 추가됩니다.
# 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)
작업 데이터를 수집한 후 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)
위의 모든 섹션을 결합한 전체 코드는 다음과 같습니다:
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from selenium.webdriver.common.by import By
import csv
# 사용자 아이디와 비밀번호로 프록시 서버 주소를 지정합니다.
proxy_address = ""
proxy_username = ""
proxy_password = ""
# 프록시 및 인증으로 Chrome 옵션 설정하기
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
# 셀레늄 와이어로 WebDriver 인스턴스 만들기
driver = wiredriver.Chrome(options=chrome_options)
url = 'https link'
# 셀레늄 와이어의 향상된 기능으로 셀레늄 자동화를 수행하세요.
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()
요청 및 lxml 라이브러리와 함께 Python을 사용해 LinkedIn에서 데이터를 추출하면 구직 시장을 분석하고 인력을 채용할 수 있는 강력한 방법을 제공합니다. 원활한 스크래핑 프로세스를 보장하기 위해 속도가 빠른 데이터센터 프록시와 신뢰 계수가 높은 ISP 프록시를 사용하여 자동화된 작업에서 차단될 위험을 줄입니다.
댓글: 0