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.
Scrape có hợp pháp không?
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 đẹp và Selenium.
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ẽ.
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 cron | Nền tảng cạo | |
---|---|---|
GIÁ CẢ | Miễn phí | Gói trả phí |
Proxy & trình duyệt không đầu | Cần mã tùy chỉnh | Các tính năng bao gồm |
Scheduler | Sự lặp lại cơ bản | Tùy chọn cấp cao |
Giám sát & Cảnh báo | Không áp dụng | Email và bảng điều khiển |
Lưu trữ kết quả | Xử lý thủ công | Tí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!