- 导入必要的模块:您导入了自动化模块
DrissionPage
以及其他常见的模块如requests
、csv
、pandas
和pyecharts
等。 - 创建CSV文件并设置字段名:您创建了名为
前程无忧.csv
的CSV文件,设置了字段名,并写入了表头。 - 使用Selenium进行网页操作:您使用
ChromiumPage
类打开浏览器,访问了前程无忧招聘网站并模拟了下滑页面操作。 - 提取网页数据:您循环采集每一页的工作数据,提取了职位、薪资、城市、区域、经验、学历、公司、领域和标签等信息,并将这些信息保存到字典中。
- 将数据写入CSV文件:您利用
csv.DictWriter
将提取的数据写入CSV文件中。
"""
模块使用
requests
DrissionPage(自动化模块)
csv
pandas
pyecharts
"""
# 导入自动化模块
from DrissionPage import ChromiumPage
import json
import csv
# 创建文件对象
f = open('前程无忧.csv',mode='w',encoding='utf-8',newline='')
# 字典方式写入
csv_write=csv.DictWriter(f,fieldnames=[
'职位',
'薪资',
'年薪',
'城市',
'区域',
'经验',
'学历',
'公司',
'领域',
'标签'
])
# 写入表头
csv_write.writeheader()
# 打开浏览器
driver = ChromiumPage()
# 访问网站
driver.get('https://we.51job.com/pc/search?jobArea=010000,020000&keyword=python%E5%BC%80%E5%8F%91%E5%B7%A5%E7%A8%8B%E5%B8%88&searchType=2&sortType=0&metro=')
# 元素定位获取相关内容
'''
css:标签属性提取数据内容->查看数据标签位置
xpath:标签节点提取数据内容
'''
for page in range(1,51):
print(f'正在采集第{page}页数据。')
# 下滑页面
driver.scroll.to_bottom()
divs=driver.eles('css:.joblist-item')
for div in divs:
info=div.ele('css:.joblist-item-job').attr('sensorsdata')
# 把json字符串数据,转换成json字典
json_data=json.loads(info)
'''通过字典键值对取值,提取数据内容'''
jobTittle=json_data['jobTitle'] #职位
jobSalary=json_data['jobSalary'].split('·')# 薪资
jobArea=json_data['jobArea'].split('·') # 地区
jobYear=json_data['jobYear'] # 经验
jobDegree=json_data['jobDegree'] # 学历
# 判断元素
if len(jobSalary) == 2:
money = jobSalary[0]
money_year = jobSalary[1]
else:
money=jobSalary[0]
money_year= '12薪'
if len(jobArea) == 2:
city = jobArea[0]
Area = jobArea[1]
else:
city = jobArea[0]
Area = '未知'
cname=div.ele('css:.cname').attr('title') # 提取标签属性 公司
cname_text = div.ele('css:.dc.text-cut').text # 提取标签文字 领域
# 提取多个标签内容 ->返回列表
tags=div.eles('css:.tag')
# 提取标签里面内容 通过列表推导式 .join()
tage_info=' '.join([i.text for i in tags])
# 保存数据到字典中
dit={
'职位':jobTittle,
'薪资':money,
'年薪':money_year,
'城市':city,
'区域':Area,
'经验':jobYear,
'学历':jobDegree,
'公司':cname,
'领域':cname_text,
'标签':tage_info,
}
# 写入数据
csv_write.writerow(dit)
print(dit)
# 点击下一页
# driver.ele('css:.btn-next').click()