python爬虫-- 爬取51job网招聘信息
项目概览
- 在浏览器上访问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网招聘信息相关推荐
- python 爬虫 爬取当当网图书信息
初次系统的学习python,在学习完基本语法后,对爬虫进行学习,现在对当当网进行爬取,爬取了基本图书信息,包括图书名.作者等 import requests from time import slee ...
- python爬虫-爬取当当网书籍信息存到Excel中
文章目录 一.任务 二.分析 (一).单页面的信息分析 源代码分析 目标信息定位与分析 代码设计 (二).所有目标页面链接分析 目标链接分析 代码设计 三.注意要点 四.完整代码 五.参考 一.任务 ...
- python爬虫爬取当当网的商品信息
python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...
- python+selenium爬取智联招聘信息
python+selenium爬取智联招聘信息 需求 准备 代码 结果 需求 老板给了我一份公司名单(大概几百家如下图),让我到网上看看这些公司分别在招聘哪些岗位,通过分析他们的招聘需求大致能推断出我 ...
- python爬虫爬取知网
python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...
- 在当当买了python怎么下载源代码-python爬虫爬取当当网
[实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...
- [python爬虫]爬取天气网全国所有县市的天气数据
[python爬虫]爬取天气网全国所有县市的天气数据 访问URL 解析数据 保存数据 所要用到的库 import requests from lxml import etree import xlwt ...
- python 爬虫 爬取高考录取分数线 信息
原文链接: python 爬虫 爬取高考录取分数线 信息 上一篇: axios 原生上传xlsx文件 下一篇: pandas 表格 数据补全空值 网页 https://gkcx.eol.cn/scho ...
- Python 爬虫第三步 -- 多线程爬虫爬取当当网书籍信息
XPath 的安装以及使用 1 . XPath 的介绍 刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊.其实我 ...
- Python爬虫爬取智联招聘(进阶版)
运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器 0.写在前面的话 本文是基于基础版上做的修改,如 ...
最新文章
- C语言函数sscanf:从一个字符串中读进与指定格式相符的数据
- python拿什么做可视化界面好-python爬虫如何制作可视化界面?(pyqt5环境配置篇)...
- python真的这么厉害吗-嗯?python居然可以这么嚣张?这么厉害!到底是为什么?...
- 无监督学习:从基本概念到四种实现模型
- idea.config.path is invalid 问题
- C++对C的加强之register关键字增强
- 无招胜有招之Java进阶JVM(一)
- AC日记——字符串P型编码 openjudge 1.7 31
- IOS设计模式学习(21)享元
- php软件开发--sphinx索引静态化及伪静态
- 机器学习实践笔记(二)EOF
- LINUX-iostat命令讲解
- luogu 1337
- List集合排序之Java8stream流排序
- 下载安装ARM交叉编译器
- 制作纯净版WinPE2.0
- origin柱状图坐标标签_origin菜鸟求助。如何做横坐标连续(如下图)的柱状图?...
- android系统级别应用开发要点
- 4K显示器和防蓝光眼镜膜
- JavaWeb将操作成功的消息返回给前端
热门文章
- java中 t无法对齐,java – 即使X应匹配T,也无法将X转换为T?
- 计算机组成原理地址线不够,计算机组成原理小结和习题2
- Django:返回Json数据中文乱码
- Java基础学习(4)-动态代理
- Java中的几种设计模式:行为型模式
- String、StringBuffer 与StringBuilder
- 算法笔记_面试_0.刷leetcode攻略
- 递归算法计算八皇后问题(Eight Queen Problem with Recursive Algorithm)
- tensorflow中的优化器
- BZOJ2565: 最长双回文串(回文树)