一、抓取详细的职位描述信息

详情页分析

在详情页中,比较重要的就是职位描述工作地址这两个

由于在页面代码中岗位职责任职要求是在一个 div 中的,所以在抓的时候就不太好分,后续需要把这个连体婴儿,分开分析。

爬虫用到的库

使用的库有:

requests
BeautifulSoup4
pymongo

Python 代码

"""
@author: jtahstu
@contact: root@jtahstu.com
@site: http://www.jtahstu.com
"""
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time
from pymongo import MongoClient
headers = {'x-devtools-emulate-network-conditions-client-id': "5f2fc4da-c727-43c0-aad4-37fce8e3ff39",'upgrade-insecure-requests': "1",'user-agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36",'accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",'dnt': "1",'accept-encoding': "gzip, deflate",'accept-language': "zh-CN,zh;q=0.8,en;q=0.6",'cookie': "__c=1501326829; lastCity=101020100; __g=-; __l=r=https%3A%2F%2Fwww.google.com.hk%2F&l=%2F; __a=38940428.1501326829..1501326829.20.1.20.20; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1501326839; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1502948718; __c=1501326829; lastCity=101020100; __g=-; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1501326839; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1502954829; __l=r=https%3A%2F%2Fwww.google.com.hk%2F&l=%2F; __a=38940428.1501326829..1501326829.21.1.21.21",'cache-control': "no-cache",'postman-token': "76554687-c4df-0c17-7cc0-5bf3845c9831"
}
conn = MongoClient('127.0.0.1', 27017)
db = conn.iApp  # 连接mydb数据库,没有则自动创建
def init():items = db.jobs_php.find().sort('pid')for item in items:if 'detail' in item.keys(): # 在爬虫挂掉再此爬取时,跳过已爬取的行continuedetail_url = "https://www.zhipin.com/job_detail/%s.html?ka=search_list_1" % item['pid']print(detail_url)html = requests.get(detail_url, headers=headers)if html.status_code != 200: # 爬的太快网站返回403,这时等待解封吧print('status_code is %d' % html.status_code)breaksoup = BeautifulSoup(html.text, "html.parser")job = soup.select(".job-sec .text")if len(job) < 1:continueitem['detail'] = job[0].text.strip()  # 职位描述location = soup.select(".job-sec .job-location")item['location'] = location[0].text.strip()  # 工作地点item['updated_at'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())  # 实时爬取时间res = save(item) # 保存数据print(res)time.sleep(40) # 停停停
# 保存数据到 MongoDB 中
def save(item):return db.jobs_php.update_one({"_id": item['_id']}, {"$set": item})
if __name__ == "__main__":init()

代码 easy,初学者都能看懂。

二、数据清洗

2.1 校正发布日期

"time" : "发布于03月31日",
"time" : "发布于昨天",
"time" : "发布于11:31",

这里拿到的都是这种格式的,所以简单处理下

import datetime
from pymongo import MongoClient
db = MongoClient('127.0.0.1', 27017).iApp
def update(data):return db.jobs_php.update_one({"_id": data['_id']}, {"$set": data})
# 把时间校正过来
def clear_time():items = db.jobs_php.find({})for item in items:if not item['time'].find('布于'):continueitem['time'] = item['time'].replace("发布于", "2017-")item['time'] = item['time'].replace("月", "-")item['time'] = item['time'].replace("日", "")if item['time'].find("昨天") > 0:item['time'] = str(datetime.date.today() - datetime.timedelta(days=1))elif item['time'].find(":") > 0:item['time'] = str(datetime.date.today())update(item)print('ok')

2.2 校正薪水以数字保存

'''
"salary" : "5K-12K",
#处理成下面的格式
"salary" : {"low" : 5000,"high" : 12000,"avg" : 8500.0
},
'''
# 薪水处理成数字,符合 xk-yk 的数据处理,不符合的跳过
def clear_salary():items = db.jobs_lagou_php.find({})for item in items:if type(item['salary']) == type({}):continuesalary_list = item['salary'].lower().replace("k", "000").split("-")if len(salary_list) != 2:print(salary_list)continuetry:salary_list = [int(x) for x in salary_list]except:print(salary_list)continueitem['salary'] = {'low': salary_list[0],'high': salary_list[1],'avg': (salary_list[0] + salary_list[1]) / 2}update(item)print('ok')

这里在处理 Boss 直聘的数据时,比较简单正常,但是后续抓到拉勾网的数据,拉勾网的数据有些不太规范。比如有‘20k以上’这种描述
2.3 根据 工作经验年限 划分招聘等级

# 校正拉勾网工作年限描述,以 Boss直聘描述为准
def update_lagou_workyear():items = db.jobs_lagou_php.find({})for item in items:if item['workYear'] == '应届毕业生':item['workYear'] = '应届生'elif item['workYear'] == '1年以下':item['workYear'] = '1年以内'elif item['workYear'] == '不限':item['workYear'] = '经验不限'update_lagou(item)print('ok')
# 设置招聘的水平,分两次执行
def set_level():items = db.jobs_zhipin_php.find({})# items = db.jobs_lagou_php.find({})for item in items:if item['workYear'] == '应届生':item['level'] = 1elif item['workYear'] == '1年以内':item['level'] = 2elif item['workYear'] == '1-3年':item['level'] = 3elif item['workYear'] == '3-5年':item['level'] = 4elif item['workYear'] == '5-10年':item['level'] = 5elif item['workYear'] == '10年以上':item['level'] = 6elif item['workYear'] == '经验不限':item['level'] = 10update(item)print('ok')

这里有点坑的就是,一般要求经验不限的岗位,需求基本都写在任职要求里了,所以为了统计的准确性,这个等级的数据,后面会被舍弃掉。

转载声明

作者:jtahstu

源自:http://www.jtahstu.com/blog/scrapy_zhipin_detail.html

Python爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗相关推荐

  1. python爬虫招聘-Python爬虫实战-抓取boss直聘招聘信息

    实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮答疑容易放弃.为此小编建了个Python全栈免费答疑.裙 : ...

  2. python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息

    Python Python开发 Python语言 Python爬虫实战-抓取boss直聘招聘信息 实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Pyth ...

  3. Python爬虫:爬取“Boss直聘”招聘数据

    hello 大家好~ 又是元气满满的一天呢~ 既然元气满满,要不要搞点事情,譬如说,爬取"Boss直聘"(此处模仿歪果仁讲话更带感)的招聘数据~ 说走咱就走,说干咱就干~" ...

  4. Python爬虫实战之二 - 基于Scrapy框架抓取Boss直聘的招聘信息

    Python爬虫实战之三 - 基于Scrapy框架抓取Boss直聘的招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于 ...

  5. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

  6. python抓取boss直聘招聘信息

    1.目前测试情况看只能抓取头3页,后续得重新换cookie抓取. 2.如果登录自己boss账户,有可能导致账户临时被封,测试情况是个人账户被封了一个小时. #!/usr/bin/python # -* ...

  7. 爬虫之爬取Boss直聘

    爬取Boss直聘主要有以下难点: 在不登陆的情况下最多爬十页就会出现手动打码验证 出现大概五六次手动打码后就会封禁ip地址,封禁1天的时间 解决办法 1.切换ip 这里我尝试过很多收费代理,免费代理, ...

  8. 爬虫进阶:Scrapy 抓取 boss 直聘、拉勾心得经验

    关于使用Scrapy的体会,最明显的感受就是这种模板化.工程化的脚手架体系,可以说是拿来即可开箱便用,大多仅需按一定的规则套路配置,剩下的就是专注于编写跟爬虫业务有关的代码.绝大多数的反反爬虫策略,大 ...

  9. python爬取boss直招_简易python爬虫爬取boss直聘职位,并写入excel

    1,默认城市是杭州,代码如下 #! -*-coding:utf-8 -*- from urllib import request, parse from bs4 import BeautifulSou ...

  10. boss直聘python_使用python抓取boss直聘岗位信息

    此文档,需要提前设置好google的webdriver. 抓取的信息会保存为xls表 可以替换url=参数来寻找不同岗位和地区:先打开boss直聘网站,然后根据自己想要查询的岗位进行搜索,再复制url ...

最新文章

  1. viewport使用 html5
  2. Android4.2.2中对安全性的改进
  3. HDU1266 Reverse Number
  4. .Net Micro Framework SDK 2.5 发布
  5. django设置models.Model数据可以为空
  6. Hadoop 在 windows 7 64位的配置(一)|非cygwin
  7. 自动化测试元素定位“最佳实践”
  8. WebService简单案例实例
  9. linux怎么下载ftp文件夹,命令行 - 如何在Linux上通过FTP递归下载文件夹
  10. 基本的核方法和径向基函数简介
  11. Ethernet/IP介绍
  12. Excel技巧之插入图表
  13. #51CTO学院四周年# 感谢51CTO学院让我走出迷茫
  14. PDF打开口令、PDF编辑限制如何解决
  15. 基于组态王和三菱PLC的modbus仿真(七)——RS指令
  16. java爬虫小说网项目_java爬虫之下载txt小说
  17. Robot framework模拟打开浏览器问题
  18. MQ 消息丢失、重复、积压问题,如何解决?
  19. 力扣6. Z 字形变换
  20. 最新爬虫(2019.07)淘宝页面登陆滑块验证 selenium + chromedriver 爬取淘宝信息

热门文章

  1. 赖美云的认证照_818吴宣仪赖美云杨超越等《创造101》人气女孩旧照,鉴定是否整容~...
  2. 追思“光纤之父”,物理学诺贝尔奖得主高锟自述
  3. 数学建模参赛技巧 --- 论文撰写
  4. 【智能算法学习】JAYA算法
  5. ChucK初步(5)
  6. nginx php 无法输出图片大小,Nginx+PHP实时生成不同尺寸图片
  7. 同花顺股票交易接口 正确用法
  8. html5 播放 3gp,一个html5播放视频的video控件只支持android的默认格式mp4和3gp
  9. 为知笔记Typora编辑器上传图片失效(20.5.16)
  10. 计算机软件对英语,计算机软件英语论文