Glassdoor là một trong những nền tảng tốt nhất cung cấp một loạt thông tin cho những người cả hai tìm kiếm việc làm và muốn thuê chúng, bao gồm thông tin lương, đánh giá sử dụng lao động và đơn xin việc. Trong hướng dẫn này, chúng tôi sẽ đi qua quá trình loại bỏ danh sách công việc từ Glassdoor bằng cách sử dụng Python và nhà viết kịch. Nhà viết kịch là điều cần thiết ở đây vì Glassdoor sử dụng các biện pháp chống bot mạnh mẽ, có thể gắn cờ và chặn các thư viện cạo truyền thống. Với nhà viết kịch, chúng tôi có thể mô phỏng một trình duyệt thực và bao gồm các proxy, giúp chúng tôi bỏ qua các hệ thống phát hiện này.
Do các cơ chế chống xẹp mạnh mẽ của Glassdoor, các yêu cầu trực tiếp với các thư viện như yêu cầu có thể dẫn đến việc chặn IP hoặc các thách thức CAPTCHA. Nhà viết kịch cho phép chúng tôi tự động hóa một trình duyệt, làm cho các tương tác của chúng tôi giống con người hơn. Bằng cách thêm các proxy và tiêu đề trình duyệt, chúng ta có thể tránh phát hiện hơn nữa.
Để bắt đầu, bạn sẽ cần cài đặt Nhà viết kịch và thư viện LXML để phân tích cú pháp HTML. Bạn có thể cài đặt chúng như sau:
pip install playwright lxml
playwright install
Chúng tôi sẽ đi qua từng bước, từ việc tải trang với nhà viết kịch đến trích xuất chi tiết công việc và lưu dữ liệu vào tệp CSV.
Đầu tiên, thiết lập nhà viết kịch với một proxy để kết nối với Glassdoor. Điều này giúp ngăn chặn việc bị chặn và cho phép trình duyệt tải trang như thể người dùng thực sự truy cập trang web.
from playwright.async_api import async_playwright
from lxml.html import fromstring
async def scrape_job_listings():
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto('https link', timeout=60000)
content = await page.content()
await browser.close()
return content
# Gọi chức năng để truy xuất nội dung trang
html_content = await scrape_job_listings()
Sau khi tải trang, sử dụng LXML để phân tích nội dung HTML và trích xuất thông tin công việc có liên quan. Tại đây, cách phân tích danh hiệu công việc, vị trí, tiền lương và các chi tiết khác cho từng danh sách công việc:
parser = fromstring(html_content)
job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
jobs_data = []
for element in job_posting_elements:
job_title = element.xpath('.//a[@data-test="job-title"]/text()')[0]
job_location = element.xpath('.//div[@data-test="emp-location"]/text()')[0]
salary = ' '.join(element.xpath('.//div[@data-test="detailSalary"]/text()')).strip()
job_link = element.xpath('.//a[@data-test="job-title"]/@href')[0]
easy_apply = bool(element.xpath('.//div[@data-role-variant="featured"]'))
company = element.xpath('.//span[@class="EmployerProfile_compactEmployerName__LE242"]/text()')[0]
job_data = {
'company': company,
'job_title': job_title,
'job_location': job_location,
'job_link': job_link,
'salary': salary,
'easy_apply': easy_apply
}
jobs_data.append(job_data)
Khi chúng tôi đã trích xuất các chi tiết công việc, chúng tôi có thể lưu chúng vào một tệp CSV để phân tích dữ liệu dễ dàng.
import csv
with open('glassdoor_job_listings.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=['company', 'job_title', 'job_location', 'job_link', 'salary', 'easy_apply'])
writer.writeheader()
writer.writerows(jobs_data)
import csv
from playwright.async_api import async_playwright
from lxml.html import fromstring
async def scrape_job_listings():
# Thiết lập trình duyệt nhà viết kịch với proxy để tránh phát hiện
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=False,
proxy={"server": '', 'username': '', 'password': ''}
)
page = await browser.new_page()
await page.goto('https://www.glassdoor.com/Job/united-states-software-engineer-jobs-SRCH_IL.0,13_IN1_KO14,31.htm', timeout=60000)
# Truy xuất nội dung trang và đóng trình duyệt
content = await page.content()
await browser.close()
# Phân tích nội dung với LXML
parser = fromstring(content)
job_posting_elements = parser.xpath('//li[@data-test="jobListing"]')
# Trích xuất dữ liệu cho mỗi danh sách công việc
jobs_data = []
for element in job_posting_elements:
job_title = element.xpath('.//a[@data-test="job-title"]/text()')[0]
job_location = element.xpath('.//div[@data-test="emp-location"]/text()')[0]
salary = ' '.join(element.xpath('.//div[@data-test="detailSalary"]/text()')).strip()
job_link = "https://www.glassdoor.com" + element.xpath('.//a[@data-test="job-title"]/@href')[0]
easy_apply = bool(element.xpath('.//div[@data-role-variant="featured"]'))
company = element.xpath('.//span[@class="EmployerProfile_compactEmployerName__LE242"]/text()')[0]
job_data = {
'company': company,
'job_title': job_title,
'job_location': job_location,
'job_link': job_link,
'salary': salary,
'easy_apply': easy_apply
}
jobs_data.append(job_data)
# Lưu dữ liệu vào tệp CSV
with open('glassdoor_job_listings.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=['company', 'job_title', 'job_location', 'job_link', 'salary', 'easy_apply'])
writer.writeheader()
writer.writerows(jobs_data)
# Chạy chức năng cạo
import asyncio
asyncio.run(scrape_job_listings())
Giải thích về mã hoàn chỉnh:
Khi cào Glassdoor hoặc bất kỳ trang web nào khác, nó rất cần thiết để tuân theo các thực hành có trách nhiệm:
Khi bạn biết cách cạo dữ liệu Glassdoor bằng cách sử dụng Python và nhà viết kịch, bạn sẽ dễ dàng nâng cao khả năng thu thập danh sách công việc của mình. Kỹ thuật này, khi kết hợp với việc sử dụng proxy và các tiêu đề phù hợp, có hiệu quả trong việc loại bỏ nguy cơ bị chặn bởi Glassdoor. Bạn cũng cần lưu ý về các chính sách cạo đạo đức để ngăn chặn sự cố các máy chủ của Glassdoor. Bằng cách tuân thủ các biện pháp này, giờ đây bạn có thể thu hoạch cũng như xử lý thông tin việc làm hữu ích từ Glassdoor để sử dụng hoặc của công ty bạn.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0