大数据教你如何从拉勾招聘网站爬取热门职位信息

效果展示:

产品运营岗位截图.png
数据分析岗位截图.png
运维岗位截图.png

使用selenium模拟Chrome浏览器操作,并下载原始数据:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020-06-12 16:01
# @Author  : Anthony
# @Email   : ianghont7@163.com
# @File    : 1 selenium_webdriver_lagou.py


from selenium import webdriver #模拟真人操作网页
import pyquery as pq  #解析网页
import time #时间插件
import os #文件模块




path = os.getcwd()
# 请自行安装chromedriver软件包
driver = webdriver.Chrome(executable_path=("chromedriver"))
# 等待整个页面加载完成再执行下一步
driver.implicitly_wait(5)
print("开始爬取数据")



#网址
lagou_http = "https://www.lagou.com/jobs/list_运维/p-city_2?px=default#filterBox"

#定义一个空列表保存查出来的数据
data = []


driver.get(lagou_http)
def getData(items):
    datalist=[]
    for item in items.items():
        temp = dict()
        temp["职位名"]= item.attr('data-positionname')
        temp["薪资范围"]= item.attr('data-salary')
        temp["公司名"]= item.attr('data-company')
        temp["公司描述"]=pq.PyQuery(item).find(".industry").text()
        temp["工作经验"]=pq.PyQuery(item).find(".p_bot>.li_b_l").remove(".money").text()
        datalist.append(temp)

    return datalist

for num in range(30):
    # 找到下一页按钮
    next_html = driver.find_element_by_css_selector(".pager_next").get_attribute('class')
    if next_html == 'pager_next ':
        # 获取到的网页数据
        items = pq.PyQuery(driver.page_source).find(".con_list_item")
        # print(items)
        data += getData(items)
        time.sleep(10)
        # 点击下一页按钮
        driver.find_element_by_xpath("//span[@action='next']").click()
    else:
        print('数据爬取结束')
        break

# 关闭浏览器
driver.close()

# 最后将获取到的数据保存到a.txt文件中
file = open(path+"/download/job_lagou.txt","w")
file.write(str(data))
print('写入文件成功')

原始数据,示例如下:

[{'职位名': '财务主管', '薪资范围': '15k-25k', '公司名': '字节跳动', '公司描述': '文娱丨内容 / C轮 / 2000人以上', '工作经验': '经验不限 / 本科'}, {'职位名': '财务经理', '薪资范围': '15k-25k', '公司名': '数科网维', '公司描述': '企业服务 / 未融资 / 150-500人', '工作经验': '经验5-10年 / 本科'},]

将原始数据清洗,并写入csv文件:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020-06-12 18:12
# @Author  : Anthony
# @Email   : ianghont7@163.com
# @File    : 2 lagou_job_read_txt.py


import csv

with open('./download/job_lagou.txt','r',encoding="utf-8") as files:
    for file in files:
        for line in eval(file):
            job_name = line['职位名']
            job_money = line['薪资范围'].split('-')[1].split('k')[0]
            company_name = line['公司名']
            company_detail = line['公司描述']
            # 公司人数
            company_people_num = company_detail.split('/')[-1].split('人')[0]
            if '-' in company_people_num:
                company_people_num = company_people_num.split('-')[1]
                company_people_num = company_people_num.strip()
            else:
                company_people_num = company_people_num.strip()
            job_time = line['工作经验'].split('/')[-1].strip()


            fieldnames = ["职位名称","薪资范围","公司名称","公司人数","工作经验"]
            with open('./download/lagou_job.csv',"a+") as writer_csvfile:
                writer = csv.DictWriter(writer_csvfile,fieldnames=fieldnames)
                with open('./download/lagou_job.csv',"r") as read_csvfile:
                    reader = csv.reader(read_csvfile)
                    if not [row for row in reader]:
                        writer.writeheader()
                        writer.writerow({"职位名称":job_name,"薪资范围":job_money,"公司名称":company_name,"公司人数":company_people_num,"工作经验":job_time})
                    else:
                        writer.writerow({"职位名称":job_name,"薪资范围":job_money,"公司名称":company_name,"公司人数":company_people_num,"工作经验":job_time})

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。