项目概览

  • 在浏览器上访问51job 官方网站,并在搜索框输入关键词“Python”,地点选在“西安”,单击”搜索“按钮进入搜索页
  • 在搜索页中,所有符合条件的职位信息以列表的形式排序设有分页显示。每条职位信息是一个URL 地址,通过URL 地址可以进入该职位的详情页。
  • 职位详情页也是数据爬取的页面,爬取的数据信息有:职位名称、企业名称、待遇、福利以及职位要求等等。

项目框架

  • 项目的开发工具选择 Requests模块和 BeautifulSoup 模块实现了爬虫开发和数据清洗。
  • 数据存储选择 Sqlalchemy 框架
  • 数据库选择Mysql

具体步骤

一:获取城市编号
  • - 通过观察搜索页的URL地址,我们就可以发现对应的搜索内容一样的时候,不同的城市对应的编号不一样。
  • 如下图所示,我们可以从网页中找到area_array_s.js。从这个网页上有地区和编号之间的关系。
  • 下面的代码是获取城市编号
def get_city_code():url = 'https://js.51jobcdn.com/in/js/h5/dd/d_jobarea.js?20191212'r = requests.get(url)begin = r.text.find('var hotcity')if begin == -1:print('Not find var hotcity')# print(begin)end = r.text.find(';',begin)if end == -1:print('Not find ; ')# print(end)result_text = r.text[begin : end-1]#print(result_text)begin = result_text.find('{')city_dict_str = result_text[begin:]# print(city_dict_str)key,value = "",""key_list,value_list = [],[]count = 1i = 0while i < len(city_dict_str):if city_dict_str[i] == '"' and count == 1:count = 2i += 1while city_dict_str[i] != '"':key += city_dict_str[i]i += 1key_list.append(key)key = ""i += 1if city_dict_str[i] == '"' and count == 2:count = 1i += 1while city_dict_str[i] != '"':value += city_dict_str[i]i += 1value_list.append(value)value = ""i += 1i += 1city_dict = {}i = 0while i < len(key_list):city_dict[value_list[i]] = key_list[i]i += 1# print(city_dict)return city_dict
获取招聘职位总页数
  • 当我们搜索Python+西安的时候,会看到以下网页。
  • 获取城市编号之后,就可以动态的构建搜索页的URL地址,实现不同地点的不同关键词的职位搜索。在爬取职位信息之前,还需要确定当前职位的总页数,因为同一职位可能会有成千上万条招聘信息,而这些招聘信息都会进行分页处理。
  • 那我们总页数的获取方式可以为通过总职位数除以每一页的职位数。通过观察便可以知道每页的职位数上限是50。总职位数可以从”Doc“选项卡里找到相应的位置。
  • 代码如下:
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36','Host' : 'search.51job.com','Upgrade-Insecure-Requests' : '1'
}# 获取职位总页数
def get_pageNumber(city_code,keyword):url = 'https://search.51job.com/list/' + str(city_code) + \',000000,0000,00,9,99,' + str(keyword) + ',2,1.html'r = requests.get(url=url,headers=headers)soup = BeautifulSoup(r.content.decode('gbk'),'html5lib')find_page = soup.find('div',class_='rt').getText()temp = re.findall(r"\d+\.?\d*",find_page)if temp:pageNumber = math.ceil(int(temp[0])/50)return pageNumberelse:return 0
爬取每个职位信息
  • 这是两个循环。遍历总页数和遍历每页的职位信息。
  • 遍历总页数:每次遍历需要重新构建搜索页的URL地址,使当前遍历的次数对于搜索页的页数。构建后的URL地址发送HTTP请求并从响应内容提取当前页面的所有职位信息。
  • 遍历每页的职位信息:对当前搜索页的所有职位的URL 地址进行遍历访问,通过发哦送HTTP请求进入每个职位的详情页,在职位详情页里爬取目标数据。
  • 代码比较多,我就不贴了,大家可以去我的githup查看"get_info"函数。
数据存储
  • 数据库选用Mysql 数据库。
  • 主要是一些创建表、更新表的数据或者新增表的数据等等,比较简单,就不贴代码了。

总结

  • 以上只是我简单的分享了一下项目的思路。
  • 代码githup:https://github.com/zhangyi-13572252156/spider-51job

python爬虫-- 爬取51job网招聘信息相关推荐

  1. python 爬虫 爬取当当网图书信息

    初次系统的学习python,在学习完基本语法后,对爬虫进行学习,现在对当当网进行爬取,爬取了基本图书信息,包括图书名.作者等 import requests from time import slee ...

  2. python爬虫-爬取当当网书籍信息存到Excel中

    文章目录 一.任务 二.分析 (一).单页面的信息分析 源代码分析 目标信息定位与分析 代码设计 (二).所有目标页面链接分析 目标链接分析 代码设计 三.注意要点 四.完整代码 五.参考 一.任务 ...

  3. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  4. python+selenium爬取智联招聘信息

    python+selenium爬取智联招聘信息 需求 准备 代码 结果 需求 老板给了我一份公司名单(大概几百家如下图),让我到网上看看这些公司分别在招聘哪些岗位,通过分析他们的招聘需求大致能推断出我 ...

  5. python爬虫爬取知网

    python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...

  6. 在当当买了python怎么下载源代码-python爬虫爬取当当网

    [实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...

  7. [python爬虫]爬取天气网全国所有县市的天气数据

    [python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...

  8. python 爬虫 爬取高考录取分数线 信息

    原文链接: python 爬虫 爬取高考录取分数线 信息 上一篇: axios 原生上传xlsx文件 下一篇: pandas 表格 数据补全空值 网页 https://gkcx.eol.cn/scho ...

  9. Python 爬虫第三步 -- 多线程爬虫爬取当当网书籍信息

    XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我 ...

  10. Python爬虫爬取智联招聘(进阶版)

    运行平台: Windows   Python版本: Python3.6   IDE: Sublime Text    其他工具:  Chrome浏览器 0.写在前面的话 本文是基于基础版上做的修改,如 ...

最新文章

  1. C语言函数sscanf:从一个字符串中读进与指定格式相符的数据
  2. python拿什么做可视化界面好-python爬虫如何制作可视化界面?(pyqt5环境配置篇)...
  3. python真的这么厉害吗-嗯?python居然可以这么嚣张?这么厉害!到底是为什么?...
  4. 无监督学习:从基本概念到四种实现模型
  5. idea.config.path is invalid 问题
  6. C++对C的加强之register关键字增强
  7. 无招胜有招之Java进阶JVM(一)
  8. AC日记——字符串P型编码 openjudge 1.7 31
  9. IOS设计模式学习(21)享元
  10. php软件开发--sphinx索引静态化及伪静态
  11. 机器学习实践笔记(二)EOF
  12. LINUX-iostat命令讲解
  13. luogu 1337
  14. List集合排序之Java8stream流排序
  15. 下载安装ARM交叉编译器
  16. 制作纯净版WinPE2.0
  17. origin柱状图坐标标签_origin菜鸟求助。如何做横坐标连续(如下图)的柱状图?...
  18. android系统级别应用开发要点
  19. 4K显示器和防蓝光眼镜膜
  20. JavaWeb将操作成功的消息返回给前端

热门文章

  1. java中 t无法对齐,java – 即使X应匹配T,也无法将X转换为T?
  2. 计算机组成原理地址线不够,计算机组成原理小结和习题2
  3. Django:返回Json数据中文乱码
  4. Java基础学习(4)-动态代理
  5. Java中的几种设计模式:行为型模式
  6. String、StringBuffer 与StringBuilder
  7. 算法笔记_面试_0.刷leetcode攻略
  8. 递归算法计算八皇后问题(Eight Queen Problem with Recursive Algorithm)
  9. tensorflow中的优化器
  10. BZOJ2565: 最长双回文串(回文树)