08.使用python采集前程无忧招聘网站50页数据

本文介绍了如何使用requests模块发送HTTP请求获取网页内容,DrissionPage库实现自动化浏览器操作,以及csv模块处理和保存数据。作者展示了在前程无忧招聘网站上抓取招聘信息的过程,包括数据提取、保存至CSV文件以及数据可视化潜在的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块使用介绍:

1. requests
  • 作用: 用于发送HTTP请求,获取Web页面的内容。
  • 重要性: 在网络爬虫中广泛使用,可方便地获取并处理网页数据。
2. DrissionPage(自动化模块)
  • 作用: 提供自动化操作浏览器的功能,如模拟浏览器行为、填写表单等。
  • 重要性: 在网页数据爬取和交互方面非常有用,可以自动执行网页操作,节省时间和精力。
3. csv
  • 作用: 用于读写CSV(逗号分隔值)文件,以便存储和处理表格数据。
  • 重要性: 在数据处理和导出方面十分实用,可将数据保存为CSV格式,便于后续分析或共享。
4. pandas -- 未使用
  • 作用: 提供数据结构和数据分析工具,支持数据索引、数据操作和数据可视化。
  • 重要性: 在数据处理和分析中常用,可以高效地处理大型数据集和进行统计分析。
5. pyecharts -- 未使用
  • 作用: 用于生成交互式的图表和数据可视化。
  • 重要性: 提供丰富的图表类型和交互功能,能够让数据更加直观地展现给用户。

代码逻辑描述:

  1. 导入模块和工具

    • 首先,导入所需的模块和工具,包括requests、DrissionPage、csv等。
  2. 创建CSV文件对象

    • 使用csv模块创建一个CSV文件对象,设置字段名称,并写入文件头部。
  3. 打开浏览器并访问网站

    • 利用DrissionPage库创建浏览器对象(driver),并使用get()方法访问目标网站,此处为前程无忧招聘信息页面。
  4. 循环遍历网页

    • 设定循环,遍历每一页的招聘信息,以提取所需数据。
  5. 提取招聘信息

    • 在循环内部,通过定位页面元素的方式,提取每条招聘信息中的职位、薪资、地区、经验、学历、公司、领域、标签等信息。
  6. 保存数据到CSV文件

    • 将提取的数据存储到一个字典中,然后使用csv模块将字典写入CSV文件中。
  7. 翻页操作

    • 在每一页数据提取完成后,通过翻页功能继续采集下一页的招聘信息,直至采集完所有页面的数据。
  8. 关闭浏览器和文件

    • 最后,关闭浏览器对象(driver)和CSV文件对象,并完成数据采集和保存过程。

 代码部分:

"""
模块使用
    requests
    DrissionPage(自动化模块)
    csv
    pandas
    pyecharts

"""
# 导入自动化模块
from DrissionPage import ChromiumPage

import json
import csv
import time
# 创建文件对象
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') # 提取标签属性 公司


        try:
            cname_text = div.ele('css:.dc.text-cut').text  # 提取标签文字 领域
        except:
            cname_text = div.ele('css:.dc.shrink-0').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()



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值