# Python怎么爬取招聘信息
## 引言
在當今信息爆炸的時代,獲取有效的招聘信息對于求職者和企業HR都至關重要。傳統的手動收集方式效率低下,而利用Python進行網絡爬蟲開發可以快速、高效地抓取各大招聘網站的職位信息。本文將詳細介紹如何使用Python爬取招聘信息,包括技術選型、反爬策略、數據存儲等完整流程。
---
## 一、技術選型與準備工作
### 1.1 核心工具庫
```python
# 常用爬蟲庫
import requests # 發送HTTP請求
from bs4 import BeautifulSoup # HTML解析
import selenium # 處理動態網頁
import scrapy # 專業爬蟲框架
# 數據存儲
import pandas as pd
import pymongo
建議使用Python 3.8+版本,安裝依賴庫:
pip install requests beautifulsoup4 selenium scrapy pymongo
以主流招聘網站為例: - 靜態頁面:智聯招聘、51job - 動態加載:BOSS直聘、拉勾網
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
def get_jobs(keyword, pages=3):
base_url = f"https://sou.zhaopin.com/?jl=530&kw={keyword}"
jobs = []
for page in range(pages):
url = f"{base_url}&p={page}"
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
for item in soup.select('.joblist-box__item'):
title = item.select_one('.jobinfo__name').text.strip()
company = item.select_one('.companyinfo__name').text.strip()
salary = item.select_one('.jobinfo__salary').text.strip()
jobs.append([title, company, salary])
return jobs
import time
import random
time.sleep(random.uniform(1, 3))
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("https://www.zhipin.com/")
# 模擬搜索操作
search_box = driver.find_element(By.NAME, 'query')
search_box.send_keys('Python開發')
search_box.submit()
# 滾動加載
for _ in range(5):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
通過瀏覽器開發者工具抓取XHR請求:
import json
api_url = "https://www.zhipin.com/wapi/zpgeek/search/joblist.json"
params = {
'query': 'Python',
'page': 1,
'pageSize': 30
}
response = requests.get(api_url, headers=headers, params=params)
data = json.loads(response.text)
import pandas as pd
df = pd.DataFrame(jobs, columns=['職位', '公司', '薪資'])
df.to_csv('jobs.csv', index=False, encoding='utf_8_sig')
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['job_db']
collection = db['zhilian']
for job in jobs:
collection.insert_one({
'title': job[0],
'company': job[1],
'salary': job[2],
'source': '智聯'
})
# 使用Scrapy-Redis實現分布式
# settings.py
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
def clean_salary(text):
# 處理薪資范圍
if '萬' in text:
return [float(x)*10000 for x in text.split('萬')[0].split('-')]
elif 'k' in text.lower():
return [float(x)*1000 for x in text.lower().split('k')[0].split('-')]
import matplotlib.pyplot as plt
df['min_salary'] = df['薪資'].apply(lambda x: clean_salary(x)[0])
df.boxplot(column='min_salary', by='城市')
plt.show()
/job_spider
│── spiders/
│ ├── zhilian.py # 智聯爬蟲
│ ├── boss.py # BOSS直聘爬蟲
│── utils/
│ ├── proxy.py # 代理管理
│ ├── cleaners.py # 數據清洗
│── config.py # 配置文件
│── pipeline.py # 數據存儲
│── requirements.txt
通過Python爬取招聘信息,我們可以構建個性化的職位監控系統,但需要注意: 1. 網站結構變化時需要及時調整解析邏輯 2. 重要業務場景建議使用官方API 3. 持續維護代理池和反反爬策略
提示:本文代碼示例需根據目標網站實際結構調整,建議先使用測試賬號進行小規模爬取。
”`
(注:實際字數約2650字,此處為保留核心內容的精簡展示版,完整版包含更多細節說明、異常處理、日志記錄等模塊的實現代碼和文字說明)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。