您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何让Python爬取招聘网站数据并做数据可视化处理
## 目录
1. [引言](#引言)
2. [技术栈概述](#技术栈概述)
3. [环境准备](#环境准备)
4. [爬虫开发实战](#爬虫开发实战)
- [4.1 目标网站分析](#41-目标网站分析)
- [4.2 基础爬虫实现](#42-基础爬虫实现)
- [4.3 反爬应对策略](#43-反爬应对策略)
5. [数据清洗与存储](#数据清洗与存储)
6. [数据可视化实现](#数据可视化实现)
- [6.1 薪资分布分析](#61-薪资分布分析)
- [6.2 岗位需求热力图](#62-岗位需求热力图)
- [6.3 技能词云图](#63-技能词云图)
7. [完整代码示例](#完整代码示例)
8. [总结与扩展](#总结与扩展)
## 引言
在当今大数据时代,招聘市场数据分析已成为企业和求职者的重要参考依据。本文将详细介绍如何使用Python技术栈构建完整的招聘数据采集与分析系统,涵盖从网页爬取到可视化呈现的全流程。
## 技术栈概述
- **爬虫框架**:Requests + BeautifulSoup(简易场景) / Scrapy(工程化项目)
- **数据存储**:CSV/Excel(轻量级)、MySQL/MongoDB(大规模)
- **数据分析**:Pandas + NumPy
- **可视化库**:Matplotlib + Seaborn(基础图表)、PyEcharts(交互式)、WordCloud(词云)
- **反爬方案**:User-Agent轮换、IP代理、Selenium模拟
## 环境准备
```python
# 创建虚拟环境(推荐)
python -m venv job_venv
source job_venv/bin/activate # Linux/Mac
job_venv\Scripts\activate # Windows
# 安装依赖库
pip install requests beautifulsoup4 pandas matplotlib seaborn pyecharts wordcloud jieba
以智联招聘为例(注:实际项目请遵守robots.txt协议):
https://sou.zhaopin.com/?jl=城市代码&kw=关键词
import requests
from bs4 import BeautifulSoup
import pandas as pd
def fetch_jobs(keyword, city_code='530', pages=3):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...'
}
base_url = f"https://sou.zhaopin.com/?jl={city_code}&kw={keyword}"
job_list = []
for page in range(1, pages+1):
params = {'p': page}
try:
response = requests.get(base_url, headers=headers, params=params)
soup = BeautifulSoup(response.text, 'html.parser')
for item in soup.select('.joblist-box__item'):
job = {
'title': item.select_one('.job-name').text.strip(),
'company': item.select_one('.company-name').text.strip(),
'salary': item.select_one('.salary').text.strip(),
'location': item.select_one('.job-area').text.strip(),
'experience': item.select_one('.job-demand span:nth-child(2)').text,
'education': item.select_one('.job-demand span:nth-child(3)').text
}
job_list.append(job)
except Exception as e:
print(f"第{page}页抓取失败: {str(e)}")
return pd.DataFrame(job_list)
headers = {
'User-Agent': random.choice(user_agent_list),
'Referer': 'https://www.zhaopin.com/',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
proxies = {
'http': 'http://12.34.56.78:8888',
'https': 'https://12.34.56.78:8888'
}
response = requests.get(url, proxies=proxies)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')
def clean_data(df):
# 薪资标准化(示例:15-20万/年 → 17.5)
df['salary_avg'] = df['salary'].apply(lambda x:
sum([float(i) for i in re.findall(r'(\d+\.?\d*)', x)])/2
if '-' in x else float(re.search(r'(\d+\.?\d*)', x).group()))
# 学历要求标准化
edu_map = {'大专': '专科', '本科': '学士', '硕士': '硕士'}
df['education'] = df['education'].replace(edu_map)
# 保存到CSV
df.to_csv('job_data.csv', index=False, encoding='utf_8_sig')
return df
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10,6))
sns.boxplot(x='education', y='salary_avg', data=df)
plt.title('不同学历薪资分布对比')
plt.xlabel('学历要求')
plt.ylabel('平均薪资(万/年)')
plt.savefig('salary_distribution.png')
from pyecharts import options as opts
from pyecharts.charts import Geo
geo = (
Geo()
.add_schema(maptype="china")
.add("岗位分布",
[list(z) for z in zip(df['company'], df['location'])],
type_="heatmap")
.set_global_opts(
title_opts=opts.TitleOpts(title="全国岗位需求热力图"),
visualmap_opts=opts.VisualMapOpts(max_=100)
)
)
geo.render("geo_heatmap.html")
from wordcloud import WordCloud
import jieba
text = ' '.join(df['title'].tolist() + df['experience'].tolist())
wordlist = ' '.join(jieba.cut(text))
wc = WordCloud(
font_path='simhei.ttf',
background_color='white',
max_words=200
).generate(wordlist)
plt.imshow(wc)
plt.axis("off")
plt.savefig('wordcloud.png')
(因篇幅限制,此处展示核心结构,完整代码需包含以下模块)
# main.py
import crawling
import cleaning
import visualization
if __name__ == "__main__":
# 1. 数据采集
raw_df = crawling.fetch_jobs('Python', pages=5)
# 2. 数据清洗
clean_df = cleaning.clean_data(raw_df)
# 3. 可视化分析
visualization.plot_salary(clean_df)
visualization.generate_wordcloud(clean_df)
本文代码已在GitHub开源:
https://github.com/example/job-spider-demo
数据采集时间:2023年8月 | 可视化工具版本:PyEcharts 2.0 “`
(注:实际文章应包含更多细节说明和代码注释,此处为保持3700字篇幅的简化版结构。完整实现需根据目标网站结构调整解析逻辑,并添加更丰富的数据分析维度。)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。