python爬虫数据可视化boss直聘
时间: 2025-01-14 10:06:36 浏览: 72
### 使用Python编写爬虫抓取Boss直聘数据
对于从Boss直聘获取数据的任务,通常会采用`requests`库来发送HTTP请求,并利用`selenium`处理动态加载的内容。由于网站可能具有反爬机制,因此还需要设置合理的请求头和延时策略以模拟真实用户的访问行为[^2]。
```python
from selenium import webdriver
import time
def get_job_listings(url):
options = webdriver.ChromeOptions()
options.add_argument('headless') # 设置无界面模式
driver = webdriver.Chrome(options=options)
try:
driver.get(url)
time.sleep(3) # 等待页面加载完成
job_elements = driver.find_elements_by_css_selector('.job-title')
jobs = [element.text for element in job_elements]
salary_elements = driver.find_elements_by_css_selector('.salary')
salaries = [element.text for element in salary_elements]
return list(zip(jobs, salaries))
finally:
driver.quit()
url = 'https://www.zhipin.com/job_detail/?query=Python&city=101010100'
jobs_and_salaries = get_job_listings(url)
print(jobs_and_salaries[:5]) # 打印前五个职位及其薪资范围
```
需要注意的是,在实际操作过程中应当遵循目标网站的服务条款,尊重其robots.txt文件中的规定,避免过度频繁地发起请求造成服务器负担过重或触发安全防护措施。
### 数据清洗与预处理
收集到原始数据之后,往往需要对其进行一定的清理工作,比如去除重复项、填补缺失值等。Pandas是一个非常适合做这类工作的工具包:
```python
import pandas as pd
dataframe = pd.DataFrame(jobs_and_salaries, columns=['Job', 'Salary'])
cleaned_df = dataframe.drop_duplicates().dropna() # 去除重复行和含有NaN的行
```
### 实现数据可视化
当准备好干净的数据集后就可以着手于可视化的部分了。Matplotlib和Seaborn都是非常流行的绘图库;而对于交互式的图表,则推荐使用ECharts这样的JavaScript库配合Flask创建Web应用展示结果[^1]。
#### 利用Matplotlib绘制柱状图比较不同岗位平均工资水平
```python
import matplotlib.pyplot as plt
average_salary_per_position = cleaned_df.groupby('Job')['Salary'].mean().sort_values(ascending=False)
plt.figure(figsize=(10,8))
plt.barh(y=average_salary_per_position.index, width=average_salary_per_position.values)
plt.title('Average Salary by Position')
plt.xlabel('Average Monthly Salary (RMB)')
plt.ylabel('Position Title')
plt.show()
```
#### 构建简单的Flask应用程序集成ECharts显示热力地图
首先安装必要的依赖:
```bash
pip install flask pyecharts
```
接着定义路由函数返回HTML模板嵌入ECharts图形组件:
```python
from flask import Flask, render_template_string
from pyecharts.charts import HeatMap
from pyecharts.options import opts
app = Flask(__name__)
@app.route('/')
def heatmap():
data = [
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
[(i % 7, i // 7, int(cleaned_df.iloc[i]['Salary'])) for i in range(len(cleaned_df))]
]
c = (
HeatMap(init_opts=opts.InitOpts(width='900px', height='600px'))
.add_xaxis(data[0])
.add_yaxis(
series_name="",
y_axis=data[0],
value=data[1],
label_opts=opts.LabelOpts(is_show=True),
)
.set_global_opts(title_opts=opts.TitleOpts(title="Heat Map of Job Salaries"))
)
template = '''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Heatmap Example</title>
<script src="https://cdn.jsdelivr.net/npm/echarts@latest/dist/echarts.min.js"></script>
</head>
<body>
<div id="main" style="width: 900px;height:600px;"></div>
<script type="text/javascript">{}</script>
</body>
</html>
'''.format(c.render_embed())
return render_template_string(template)
if __name__ == '__main__':
app.run(debug=True)
```
阅读全文
相关推荐



















