Hướng dẫn cạo dữ liệu LinkedIn với Python

Bình luận: 0

Dữ liệu LinkedIn của Scraping có thể vô cùng có giá trị vì nhiều lý do:

  • Phân tích thị trường việc làm: Phân tích xu hướng trong danh sách công việc, chẳng hạn như các kỹ năng và ngành công nghiệp có nhu cầu cao nhất;
  • Tuyển dụng: Thu thập dữ liệu về các bài đăng công việc để thông báo cho các chiến lược tuyển dụng;
  • Nghiên cứu của đối thủ cạnh tranh: Giám sát các mô hình và chiến lược tuyển dụng của các đối thủ cạnh tranh.

Bài viết sẽ nhấn mạnh các kỹ thuật và chiến lược quan trọng, bao gồm tầm quan trọng của việc tránh phát hiện thông qua các proxy và tiêu đề ngay từ đầu. Thư viện yêu cầu sẽ được sử dụng để thực hiện các yêu cầu HTTP trong khi LXML sẽ được sử dụng để phân tích nội dung HTML.

Thiết lập môi trường

Trước khi bạn bắt đầu, hãy chắc chắn rằng bạn đã cài đặt Python trên máy của mình.

Cài đặt các thư viện cần thiết bằng PIP:


pip install requests
pip install lxml

Bắt đầu với cào

Dưới đây, một ví dụ về mã toàn diện để loại bỏ danh sách công việc LinkedIn bằng Python:

Nhập thư viện

Chúng tôi sẽ cần một số thư viện Python:

  • requests: Để thực hiện các yêu cầu HTTP để truy xuất các trang web.
  • lxml: Cho phân tích nội dung HTML.
  • csv: Để viết dữ liệu được trích xuất vào tệp CSV.

import requests
from lxml import html
import csv
import random

Xác định URL tìm kiếm việc làm

Bắt đầu bằng cách xác định URL tìm kiếm công việc LinkedIn mà bạn muốn cạo.


url = 'https link'

Chuỗi và proxy người dùng

Để cạo LinkedIn một cách hiệu quả, nó rất quan trọng để sử dụng các tiêu đề chính xác, đặc biệt là tiêu đề tác nhân của người dùng, để bắt chước các yêu cầu từ một trình duyệt thực tế.


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

Các nhà cung cấp proxy hiện đại thường hỗ trợ xoay vòng nội bộ, nghĩa là chúng tự động xoay địa chỉ IP cho bạn. Điều này loại bỏ sự cần thiết phải chọn các proxy theo cách thủ công từ một danh sách. Tuy nhiên, với mục đích minh họa, ở đây, How How1, bạn sẽ xử lý vòng quay proxy nếu cần:


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

Tiêu đề cho các yêu cầu

LinkedIn thành công bản lề trên các thiết lập chính xác của các tiêu đề mô phỏng hành vi của một trình duyệt thực. Các tiêu đề được cấu hình đúng không chỉ hỗ trợ trong việc phá vỡ các hệ thống bảo vệ chống BOT mà còn làm giảm cơ hội các hoạt động cạo của bạn bị chặn.


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

Khởi tạo lưu trữ dữ liệu

Để thu thập và lưu trữ thông tin đăng công việc một cách hiệu quả, bạn nên bắt đầu bằng cách khởi tạo một kho lưu trữ dữ liệu. Trong Python, điều này thường liên quan đến việc tạo một danh sách trống. Danh sách này sẽ phục vụ như một thùng chứa lưu trữ nơi bạn có thể thêm chi tiết công việc khi chúng được trích xuất từ ​​nội dung HTML. Phương pháp này đảm bảo rằng thông tin được thu thập một cách có hệ thống và dễ dàng truy cập để xử lý hoặc phân tích thêm.

job_details = []

Phân tích nội dung HTML

Sau khi gửi yêu cầu HTTP, bước tiếp theo là phân tích nội dung HTML bằng thư viện LXML. Điều này sẽ cho phép chúng tôi điều hướng qua cấu trúc HTML và xác định dữ liệu chúng tôi muốn trích xuất.


# Đặt tác nhân người dùng ngẫu nhiên và proxy với phương thức ủy quyền IP
headers['user-agent'] = random.choice(user_agents)
proxies = {
    'http': IP:PORT,
    'https': IP:PORT
}

# Gửi HTTP Nhận yêu cầu đến URL
response = requests.get(url=url, headers=headers, proxies=proxies)
parser = html.fromstring(response.content)

Trích xuất dữ liệu công việc

Khi nội dung HTML được phân tích cú pháp, chúng tôi có thể trích xuất các chi tiết công việc cụ thể như tiêu đề, tên công ty, vị trí và URL công việc bằng cách sử dụng các truy vấn XPath. Những chi tiết này được lưu trữ trong một từ điển và được thêm vào một danh sách.


# Trích xuất chi tiết công việc từ nội dung 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)

Lưu dữ liệu vào CSV

Sau khi thu thập dữ liệu công việc, hãy lưu nó vào tệp 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)

Hoàn thành mã

Đây là mã hoàn chỉnh, kết hợp tất cả các phần trên:


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

# Chỉ định địa chỉ máy chủ proxy với tên người dùng và mật khẩu
proxy_address = ""
proxy_username = ""
proxy_password = ""

# Thiết lập các tùy chọn Chrome với proxy và xác thực
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')

# Tạo một thể hiện webdriver với Selenium-Wire
driver = wiredriver.Chrome(options=chrome_options)

url = 'https link'

# Thực hiện tự động hóa selen của bạn với các khả năng nâng cao của dây selen
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()

Trích xuất dữ liệu từ LinkedIn bằng Python với các yêu cầu và thư viện LXML cung cấp một cách mạnh mẽ để phân tích thị trường việc làm và nhân viên tuyển dụng. Để đảm bảo quy trình cạo trơn tru, các proxy Datacenter có tốc độ cao được sử dụng, cũng như các proxy ISP có yếu tố tin cậy cao hơn, làm giảm nguy cơ các khối đối với các hành động tự động.

Bình luận:

0 Bình luận