效果展示:
产品运营岗位截图.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})