爬取boss直聘并可视化
时间: 2025-07-05 15:09:23 浏览: 1
### 如何爬取 Boss 直聘 数据并进行可视化分析
#### 使用 Python 爬虫获取 BOSS 直聘数据
为了实现这一目标,可以采用如下方法:
创建一个新的 Python 文件 `boss_zhipin.py` 来编写用于抓取 BOSS 直聘招聘信息的脚本。此过程涉及多个重要环节,包括发送 HTTP 请求、解析 HTML 文档结构以及提取所需的信息字段。
```python
import requests
from lxml import etree
import csv
import pandas as pd
from pyecharts.charts import Bar, Line, Pie # 导入所需的图表组件
def fetch_data(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
}
response = requests.get(url, headers=headers)
html_content = response.text
tree = etree.HTML(html_content)
job_titles = tree.xpath('//div[@class="job-title"]/text()')
salaries = tree.xpath('//span[@class="red"]/text()')
data_list = []
for i in range(len(job_titles)):
item = {'title': job_titles[i], 'salary': salaries[i]}
data_list.append(item)
save_to_csv(data_list)
def save_to_csv(items):
with open('jobs.csv', mode='w', newline='', encoding='utf-8') as file:
writer = csv.DictWriter(file, fieldnames=['title', 'salary'])
writer.writeheader()
writer.writerows(items)
if __name__ == '__main__':
url = "https://www.zhipin.com/job_detail/?query=Python&city=101010100"
fetch_data(url)
```
这段代码定义了一个函数来发起网络请求,并利用 XPath 技术定位网页中的特定元素位置,从而抽取职位名称和薪资范围等信息[^1]。
#### 对采集到的数据进行清洗处理
由于实际工作中所获得的数据可能存在缺失值或其他异常情况,在进一步分析之前应当先对其进行预处理。这里假设已经通过上述方式得到了一份 CSV 格式的原始数据集,则可以通过 Pandas 库来进行初步清理工作:
```python
df = pd.read_csv('jobs.csv')
print(df.head())
# 清洗 salary 列的内容,去除多余的字符并将字符串转换成数值型
df['min_salary'] = df['salary'].str.extract(r'(\d+)k').astype(float)*1000
df.drop(columns=['salary'], inplace=True)
```
以上操作会读取本地存储的工作列表文件,并打印前几条记录以便查看;接着针对工资列执行正则表达式匹配以分离最低月薪部分,最后删除不再使用的旧版本列名[^2]。
#### 创建交互式可视化报告
完成数据准备之后就可以着手构建图形界面了。PyEcharts 是一个非常优秀的开源项目,它允许开发者轻松制作出美观大方且功能丰富的统计图件。下面是一个简单的例子展示了如何绘制柱状图对比不同岗位之间的平均薪酬水平差异:
```python
bar_chart = (
Bar(init_opts={'width':'900px','height':'700px'})
.add_xaxis(list(set(df['title'])))
.add_yaxis("月均收入", list(round(df.groupby(['title'])['min_salary'].mean(), 2)), category_gap="30%")
.set_global_opts(title_opts={"text": "各职业类别对应的平均月薪"},
toolbox_opts={"feature":{"saveAsImage":""}})
)
bar_chart.render_notebook()
```
这段程序片段首先初始化了一张空白画布设置了宽度高度参数,随后依次添加 X 轴标签序列 Y 轴数值向量作为绘图素材,最终调用 render 方法输出至 Jupyter Notebook 中显示出来。
阅读全文
相关推荐

















