Bỏ để qua phần nội dung

Hướng dẫn từng bước để lấy dữ liệu từ Indeed

Này! Bạn đang tìm cách xóa danh sách việc làm khỏi Indeed? Bạn đã đến đúng nơi.

Indeed là một trong những công cụ tìm kiếm việc làm lớn nhất trên web, với hơn 250 triệu số lượng khách truy cập mỗi tháng. Đó là kho dữ liệu khổng lồ về tin tuyển dụng, tiền lương, hồ sơ công ty và hơn thế nữa.

Thật không may, API của Indeed không hiển thị đầy đủ tất cả dữ liệu này. Đó là lúc việc quét web xuất hiện.

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn từng bước cách sử dụng Indeed bằng Python. Tôi sẽ chia sẻ những đoạn mã mà bạn có thể sử dụng, cùng với các mẹo để trích xuất chính xác và tránh bị chặn.

Tôi cũng sẽ đề cập đến cách tự động quét để chạy hàng ngày, hàng tuần hoặc hàng tháng. Bằng cách đó, bạn có thể tự động cập nhật dữ liệu danh sách công việc của mình!

Cuối cùng, bạn sẽ tìm kiếm các tin tuyển dụng trên Indeed như một chuyên gia. Nào cùng đào vào bên trong!

Tại sao phải thu thập danh sách việc làm trên Indeed?

Trước khi bắt tay vào làm quen với một số mã Python, hãy nói về tại sao bạn có thể muốn lấy dữ liệu từ Indeed ngay từ đầu.

Đây chỉ là một vài ý tưởng:

  • Nghiên cứu thị trường – Phân tích xu hướng đăng tuyển để xác định các kỹ năng hoặc vai trò đang có nhu cầu ngày càng tăng. Quả thực có dữ liệu về hàng triệu mở cửa trên tất cả các ngành công nghiệp.

  • Trí thông minh cạnh tranh – Xem mức lương và phúc lợi mà công ty đưa ra cho những vai trò tương tự. Hữu ích khi đánh giá các gói bồi thường của riêng bạn.

  • Công cụ tìm kiếm việc làm – Xây dựng bảng việc làm tùy chỉnh bằng cách sử dụng dữ liệu Indeed được lọc theo từ khóa hoặc vị trí cụ thể.

  • Công cụ tuyển dụng – Theo dõi các cơ hội tuyển dụng mới phù hợp với kỹ năng của ứng viên để tìm ra các công việc liên quan.

  • Tiếp tục phân tích – Trích xuất từ ​​khóa và kỹ năng từ mô tả công việc để đưa ra đề xuất cải thiện sơ yếu lý lịch và thư xin việc.

Đó chỉ là một vài ví dụ – với dữ liệu có cấu trúc phong phú về tin tuyển dụng, khả năng là vô tận!

Bây giờ chúng ta hãy xem cách thực sự trích xuất dữ liệu đó bằng cách quét web.

Trước khi đi sâu vào mã hóa, tôi muốn nhanh chóng đề cập đến tính hợp pháp của việc quét web. Tôi biết một số người có mối quan tâm ở đây.

Câu trả lời ngắn gọn là: thu thập dữ liệu công khai từ Indeed là hoàn toàn hợp pháp trong hầu hết các trường hợp, miễn là bạn tuân theo một số quy tắc cơ bản:

  • Chỉ truy cập các trang công khai - không cố gắng lấy thông tin đăng nhập hoặc dữ liệu riêng tư của người dùng.

  • Đừng làm quá tải các máy chủ của Indeed bằng cách thu thập dữ liệu quá mạnh mẽ. Thực hiện theo các thực hành thu thập thông tin lịch sự.

  • Tuân thủ Điều khoản dịch vụ của Indeed. Họ không đặc biệt cấm việc quét web.

  • Tránh sao chép nguyên văn những đoạn trích lớn để tôn trọng bản quyền. Diễn giải là ok.

  • Không xuất bản lại bất kỳ dữ liệu riêng tư, cá nhân hoặc nhạy cảm nào đã được thu thập.

Nếu bạn tuân theo những nguyên tắc thông thường này, việc thu thập dữ liệu trên web Indeed để tìm dữ liệu danh sách việc làm công khai được pháp luật cho phép ở hầu hết các quốc gia.

Tất nhiên, tôi vẫn khuyên bạn nên tham khảo ý kiến ​​của luật sư nếu bạn có bất kỳ lo ngại nào do luật pháp có nhiều khác biệt. Nhưng bạn có thể tự tin sử dụng Indeed miễn là bạn luôn giữ đạo đức!

Được rồi, hãy đi sâu vào nội dung thú vị – mã thực tế!

Quét danh sách Indeed bằng Python

Khi tìm kiếm các trang web lớn như Indeed, Python là một lựa chọn tuyệt vời nhờ các thư viện như yêu cầu, Súp đẹpSelenium.

Tôi sẽ hướng dẫn bạn qua một kịch bản để:

  • Trích xuất danh sách công việc phù hợp với tìm kiếm từ khóa và vị trí

  • Phân tích các chi tiết như chức danh công việc, mức lương và mô tả

  • Tự động phân trang để tìm nạp tất cả danh sách trên nhiều trang

Bắt đầu nào!

Nhập thư viện

Chúng tôi sẽ sử dụng yêu cầu để tìm nạp trang, Súp đẹp để phân tích cú pháp, Thời gian để ga, và Gấu trúc để lưu trữ dữ liệu:

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd

Yêu cầu và BeautifulSoup đều là bạn có thật không nhu cầu. Nhưng Pandas giúp quản lý dữ liệu, trong khi Time hạn chế các yêu cầu.

Xác định tham số tìm kiếm

Đầu tiên, hãy xác định danh sách công việc mà chúng ta muốn. Chỉ định từ khóa, vị trí và các bộ lọc khác:

keywords = "Remote Software Engineer"
location = "United States" 
salary_min = 100000

Điều này nhắm đến các công việc phần mềm từ xa được trả lương cao ở Mỹ. Điều chỉnh theo tiêu chí mong muốn của bạn.

Tìm nạp trang kết quả tìm kiếm

Với các tham số được đặt, chúng tôi sẽ yêu cầu URL, chuyển từ khóa và vị trí của chúng tôi:

BASE_URL = "https://www.indeed.com/jobs?" 

params = {
  ‘q‘: keywords,
  ‘l‘: location,
  ‘minSalary‘: salary_min,
  ‘remotejob‘: ‘remote‘ # Filter remote jobs  
}

print(f‘Fetching job listings for {keywords} in {location}...‘)

res = requests.get(BASE_URL, params=params)
res.raise_for_status() # Raise exception for 4xx/5xx

Điều này thực hiện truy vấn tìm kiếm ban đầu, lọc theo từ khóa và tham số của chúng tôi.

Phân tích kết quả bằng BeautifulSoup

Tiếp theo chúng ta sẽ phân tích cú pháp HTML của trang kết quả tìm kiếm để trích xuất dữ liệu danh sách cấp cao:

soup = BeautifulSoup(res.text, ‘html.parser‘)

listings = [] # List to store listings

for div in soup.find_all(‘div‘, class_=‘job_seen_beacon‘):

  title = div.find(‘h2‘).text.strip()

  company = div.find(‘span‘, class_=‘companyName‘).text.strip()

  location = div.find(‘div‘, class_=‘companyLocation‘).text.strip()

  # Append listing data    
  listings.append({
    ‘title‘: title,
    ‘company‘: company, 
    ‘location‘: location
  })

Ở đây chúng tôi xác định vị trí mỗi danh sách div, lấy các trường chính như tiêu đề và công ty rồi lưu trữ trong listings danh sách.

Xử lý phân trang

Indeed chia kết quả trên nhiều trang. Chúng ta sẽ cần phải lặp lại từng bước:

# Track page number 
current_page = 0

while True:

  # Increment page
  current_page += 1 

  print(f‘Scraping page {current_page}...‘)

  # Build URL for next page
  next_page_url = BASE_URL + f‘&start={current_page*10}‘  

  # Fetch page HTML
  res = requests.get(next_page_url, params=params)

  # Parse HTML
  soup = BeautifulSoup(res.text, ‘html.parser‘)   

  # Return if last page
  if not soup.find(‘a‘, {‘aria-label‘: ‘Next‘}):
    print(‘Reached last page!‘)
    break

  # Extract listings
  for div in soup.find_all(...):
    # Extract listing data

  # Sleep to throttle requests  
  time.sleep(3) 

print(f‘Scraped {len(listings)} listings‘)

Ở đây chúng tôi liên tục tăng số trang, tìm nạp trang tiếp theo, trích xuất danh sách và lặp lại cho đến khi đến trang cuối cùng.

Thêm một đoạn ngắn time.sleep() ga giúp tránh làm quá tải máy chủ của Indeed.

Chi tiết danh sách cạo

Cho đến nay chúng tôi đã trích xuất được dữ liệu cấp cao như chức danh và công ty. Để biết thông tin chi tiết như mức lương và mô tả, chúng tôi sẽ lấy từng URL danh sách:

from selenium import webdriver

driver = webdriver.Chrome()

# Loop through listings
for listing in listings:

  print(f‘Getting details for {listing["title"]}‘)

  # Load listing URL
  url = listing[‘url‘]  
  driver.get(url)

  # Extract key fields
  desc = driver.find_element_by_id(‘jobDescriptionText‘).text
  salary = driver.find_element_by_class_name(‘salary-snippet‘).text

  listing[‘desc‘] = desc
  listing[‘salary‘] = salary

  # Sleep to throttle
  time.sleep(2)

driver.quit()  

Ở đây Selenium cung cấp một trình duyệt đầy đủ để hiển thị các trang nặng JavaScript. Chúng tôi tải từng URL và trích xuất các trường bổ sung như mô tả và mức lương.

Pro Mẹo: Cân nhắc sử dụng dịch vụ ủy quyền để tránh chặn IP khi sử dụng Selenium trên quy mô lớn.

Và thế là xong! Với những bước đó, bạn có thể tự động tìm kiếm hàng nghìn danh sách việc làm từ Indeed.

Kết quả cuối cùng là dữ liệu công việc có cấu trúc mà bạn có thể phân tích hoặc xuất sang các công cụ như Excel. Hãy xem xét một vài ví dụ tiếp theo.

Bạn có thể làm gì với dữ liệu Indeed đã được thu thập?

Bây giờ chúng tôi có thể thu thập danh sách Indeed, chúng tôi thực sự có thể làm gì với dữ liệu đó?

Đây chỉ là một vài ý tưởng:

Xuất sang Excel để phân tích

df = pandas.DataFrame(listings)
df.to_excel(‘indeed_listings.xlsx‘, index=False)

Pandas giúp bạn dễ dàng xuất kết quả sang Excel. Điều này cho phép lọc, bảng tổng hợp và công thức mạnh mẽ.

Thực tế dữ liệu trong Excel

Bạn có thể phân tích xu hướng ở các vị trí, mức lương, kỹ năng, v.v.

Xây dựng cơ sở dữ liệu tìm kiếm việc làm

import sqlite3

# Connect to SQLite database
conn = sqlite3.connect(‘jobs.db‘)

# Create table
conn.execute(‘‘‘
  CREATE TABLE jobs (
    title TEXT,
    company TEXT, 
    description TEXT,
    salary REAL  
  );
‘‘‘)

# Insert listings into database
for listing in listings:
  conn.execute("""
    INSERT INTO jobs VALUES (
      ?, ?, ?, ?
    )""", (listing[‘title‘], listing[‘company‘], 
            listing[‘desc‘], listing[‘salary‘]))

conn.commit()
conn.close()

SQLite cung cấp một cơ sở dữ liệu đơn giản để lưu trữ danh sách cho việc tìm kiếm tùy chỉnh. Tích hợp với Flask để xây dựng bảng việc làm của riêng bạn!

Gửi danh sách liên quan qua email cho ứng viên

import smtplib
from email.message import EmailMessage

# Connect to SMTP server 
smtp = smtplib.SMTP(‘smtp.domain.com‘)

for listing in listings:

  # Check if listing matches candidate skills  

  if match:

    msg = EmailMessage()
    msg[‘Subject‘] = f‘New job for you - {listing["title"]}‘  
    msg[‘From‘] = ‘[email protected]‘
    msg[‘To‘] = ‘[email protected]‘
    msg.set_content(listing[‘desc‘])

    # Send listing to candidate
    smtp.send_message(msg)

smtp.quit()

Python giúp dễ dàng tự động gửi email cho ứng viên danh sách mới phù hợp với kỹ năng và sở thích của họ.

Đây chỉ là một mẫu nhỏ – với dữ liệu về hàng triệu danh sách, khả năng là vô tận!

Bây giờ chúng ta hãy xem việc chạy máy cạp này một cách tự động.

Lên lịch thực tế hàng ngày

Mặc dù việc tìm kiếm Indeed trong thời gian thực rất hữu ích nhưng việc thiết lập thậm chí còn có giá trị hơn mẩu tin lưu niệm tự động, theo lịch trình để giữ cho dữ liệu của bạn luôn mới.

Dưới đây là hai lựa chọn tốt để chạy công cụ cạp theo lịch định kỳ cố định:

Việc cron

Một cách đơn giản để tự động hóa các tập lệnh Python là cron, một tiện ích Linux tiêu chuẩn.

Thêm một mục như thế này để chạy hàng ngày lúc 8 giờ sáng:

0 8 * * * python /home/user/indeedScraper.py

Bạn có thể lên lịch tái phát phức tạp. Nhưng cron thiếu báo cáo nếu các mẩu tin lưu niệm không thành công.

Nền tảng cạo

Để lập kế hoạch và tự động hóa mạnh mẽ hơn, tôi khuyên bạn nên sử dụng nền tảng thu thập dữ liệu chuyên dụng như Trị liệu or Apify.

Chúng cung cấp khả năng tự động hóa trình duyệt và proxy để xử lý CAPTCHA, khối và JavaScript. Và họ đã tích hợp sẵn lịch trình công việc định kỳ dễ dàng.

Bạn cũng nhận được thông báo qua email, phân tích hiệu suất và các tùy chọn tích hợp. Họ thực sự không còn phải đau đầu với việc tự động hóa nữa!

Đây là một so sánh nhanh:

Việc cronNền tảng cạo
GIÁ CẢMiễn phíGói trả phí
Proxy & trình duyệt không đầuCần mã tùy chỉnhCác tính năng bao gồm
SchedulerSự lặp lại cơ bảnTùy chọn cấp cao
Giám sát & Cảnh báoKhông áp dụngEmail và bảng điều khiển
Lưu trữ kết quảXử lý thủ côngTích hợp lưu trữ và xuất khẩu

Đối với các trang web lớn, phức tạp như Indeed, tôi khuyên bạn nên sử dụng nền tảng chuyên dụng. Độ tin cậy và các tính năng bổ sung đáng giá khi cạo trên quy mô lớn.

Hãy tóm tắt lại

Trong hướng dẫn này bạn đã học được:

  • Tại sao Scraping Indeed rất hữu ích cho các công cụ nghiên cứu thị trường, tìm kiếm việc làm và tuyển dụng.

  • Làm thế nào để trích xuất danh sách bằng cách bắt chước các truy vấn tìm kiếm bằng Python.

  • Các phương pháp hay nhất như điều chỉnh các yêu cầu và sử dụng proxy để tránh bị chặn.

  • Làm thế nào để phân tích chi tiết như mức lương và mô tả từ các trang danh sách.

  • Tùy chọn tự động hóa như cron và các nền tảng thu thập dữ liệu chuyên dụng để giữ cho dữ liệu của bạn luôn mới.

Các mẫu mã ở trên sẽ cung cấp cho bạn một mẫu để bắt đầu thu thập dữ liệu Indeed của riêng bạn. Hãy thoải mái điều chỉnh và xây dựng dựa trên nó cho trường hợp sử dụng của bạn!

Chỉ cần nhớ tôn trọng Điều khoản dịch vụ của Indeed, tránh thu thập dữ liệu quá mạnh tay và tuân thủ nghiêm ngặt việc thu thập dữ liệu trên web để tuân thủ pháp luật.

Tôi hy vọng hướng dẫn này đã cung cấp cho bạn cái nhìn tổng quan toàn diện về cách thu thập dữ liệu Indeed một cách hiệu quả bằng Python. Việc tự động hóa các bước này cho phép bạn tận dụng kho dữ liệu danh sách việc làm đáng kinh ngạc của Indeed.

Hãy cho tôi biết nếu bạn có bất kì câu hỏi nào khác! Tôi luôn sẵn lòng trò chuyện nhiều hơn về các phương pháp hay nhất về quét web.

Chúc may mắn với dự án Scraping Indeed của bạn!

Tham gia vào cuộc đối thoại

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *