本文目标

获取 Ajax 请求,解析 JSON 中所需字段
数据保存到 Excel 中
数据保存到 MySQL, 方便分析

简单分析

五个城市 Python 岗位平均薪资水平

Python 岗位要求学历分布

Python 行业领域分布

Python 公司规模分布

查看页面结构

我们输入查询条件以 Python 为例,其他条件默认不选,点击查询,就能看到所有 Python 的岗位了,然后我们打开控制台,点击网络标签可以看到如下请求:

从响应结果来看,这个请求正是我们需要的内容。后面我们直接请求这个地址就好了。从图中可以看出 result 下面就是各个岗位信息。

到这里我们知道了从哪里请求数据,从哪里获取结果。但是 result 列表中只有第一页 15 条数据,其他页面数据怎么获取呢?

分析请求参数

我们点击参数选项卡,如下:

发现提交了三个表单数据,很明显看出来 kd 就是我们搜索的关键词,pn 就是当前页码。first 默认就行了,不用管它。剩下的事情就是构造请求,来下载 30 个页面的数据了。

构造请求,并解析数据

构造请求很简单,我们还是用 requests 库来搞定。首先我们构造出表单数据 data = {‘first’: ‘true’, ‘pn’: page, ‘kd’: lang_name} 之后用 requests 来请求url地址,解析得到的 Json 数据就算大功告成了。由于拉勾对爬虫限制比较严格,我们需要把浏览器中 headers 字段全部加上,而且把爬虫间隔调大一点,我后面设置的为 10-20s,然后就能正常获取数据了。

import requestsdef get_json(url, page, lang_name):headers = {'Host': 'www.lagou.com','Connection': 'keep-alive','Content-Length': '23','Origin': 'https://www.lagou.com','X-Anit-Forge-Code': '0','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Accept': 'application/json, text/javascript, */*; q=0.01','X-Requested-With': 'XMLHttpRequest','X-Anit-Forge-Token': 'None','Referer': 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7'}data = {'first': 'false', 'pn': page, 'kd': lang_name}json = requests.post(url, data, headers=headers).json()list_con = json['content']['positionResult']['result']info_list = []for i in list_con:info = []info.append(i.get('companyShortName', '无'))info.append(i.get('companyFullName', '无'))info.append(i.get('industryField', '无'))info.append(i.get('companySize', '无'))info.append(i.get('salary', '无'))info.append(i.get('city', '无'))info.append(i.get('education', '无'))info_list.append(info)return info_list

获取所有数据

了解了如何解析数据,剩下的就是连续请求所有页面了,我们构造一个函数来请求所有 30 页的数据。

def main():lang_name = 'python'wb = Workbook()conn = get_conn()for i in ['北京', '上海', '广州', '深圳', '杭州']:page = 1ws1 = wb.activews1.title = lang_nameurl = 'https://www.lagou.com/jobs/positionAjax.json?city={}&needAddtionalResult=false'.format(i)while page < 31:info = get_json(url, page, lang_name)page += 1import timea = random.randint(10, 20)time.sleep(a)for row in info:insert(conn, tuple(row))ws1.append(row)conn.close()wb.save('{}职位信息.xlsx'.format(lang_name))if __name__ == '__main__':main()

完整代码

import random
import timeimport requests
from openpyxl import Workbook
import pymysql.cursorsdef get_conn():'''建立数据库连接'''conn = pymysql.connect(host='localhost',user='root',password='root',db='python',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)return conndef insert(conn, info):'''数据写入数据库'''with conn.cursor() as cursor:sql = "INSERT INTO `python` (`shortname`, `fullname`, `industryfield`, `companySize`, `salary`, `city`, `education`) VALUES (%s, %s, %s, %s, %s, %s, %s)"cursor.execute(sql, info)conn.commit()//如果大家对Python感兴趣的话,可以加一下我们的学习交流抠抠群哦:649825285,免费领取一套学习资料和视频课程哟~
def get_json(url, page, lang_name):'''返回当前页面的信息列表'''headers = {'Host': 'www.lagou.com','Connection': 'keep-alive','Content-Length': '23','Origin': 'https://www.lagou.com','X-Anit-Forge-Code': '0','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Accept': 'application/json, text/javascript, */*; q=0.01','X-Requested-With': 'XMLHttpRequest','X-Anit-Forge-Token': 'None','Referer': 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7'}data = {'first': 'false', 'pn': page, 'kd': lang_name}json = requests.post(url, data, headers=headers).json()list_con = json['content']['positionResult']['result']info_list = []for i in list_con:info = []info.append(i.get('companyShortName', '无'))  # 公司名info.append(i.get('companyFullName', '无'))info.append(i.get('industryField', '无'))   # 行业领域info.append(i.get('companySize', '无'))  # 公司规模info.append(i.get('salary', '无'))   # 薪资info.append(i.get('city', '无'))info.append(i.get('education', '无'))   # 学历info_list.append(info)return info_list   # 返回列表def main():lang_name = 'python'wb = Workbook()  # 打开 excel 工作簿conn = get_conn()  # 建立数据库连接  不存数据库 注释此行for i in ['北京', '上海', '广州', '深圳', '杭州']:   # 五个城市page = 1ws1 = wb.activews1.title = lang_nameurl = 'https://www.lagou.com/jobs/positionAjax.json?city={}&needAddtionalResult=false'.format(i)while page < 31:   # 每个城市30页信息info = get_json(url, page, lang_name)page += 1time.sleep(random.randint(10, 20))for row in info:insert(conn, tuple(row))  # 插入数据库,若不想存入 注释此行ws1.append(row)conn.close()  # 关闭数据库连接,不存数据库 注释此行wb.save('{}职位信息.xlsx'.format(lang_name))if __name__ == '__main__':main()

Python爬虫——爬取Python岗位的那些事相关推荐

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

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

  2. python爬虫代码实例-Python爬虫爬取百度搜索内容代码实例

    这篇文章主要介绍了Python爬虫爬取百度搜索内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 搜索引擎用的很频繁,现在利用Python爬 ...

  3. python爬虫数据分析可以做什么-python爬虫爬取的数据可以做什么

    在Python中连接到多播服务器问题,怎么解决你把redirect关闭就可以了.在send时,加上参数allow_redirects=False 通常每个浏览器都会设置redirect的次数.如果re ...

  4. python爬虫爬取csdn博客专家所有博客内容

    python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 #coding:utf-8import urlli ...

  5. python网易云_用python爬虫爬取网易云音乐

    标签: 使用python爬虫爬取网易云音乐 需要使用的模块 只需要requests模块和os模块即可 开始工作 先去网易云音乐网页版找一下你想要听的歌曲点击进去.按键盘F12打开网页调试工具,点击Ne ...

  6. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  7. python如何爬取网站所有目录_用python爬虫爬取网站的章节目录及其网址

    认识爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟 ...

  8. 运用Python爬虫爬取一个美女网址,爬取美女图

    运用Python爬虫爬取一个美女网址,爬取美女图 要运用到的python技术: 导入库 1.request 发送请求,从服务器获取数据 2.BeautifulSoup 用来解析整个网页的源代码 imp ...

  9. Python爬虫|爬取喜马拉雅音频

    "GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...

最新文章

  1. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 在 Flutter 端实现 BasicMessageChannel 通信 )
  2. 为什么应该用record来定义DTO(续)
  3. java桥_java 泛型--桥方法
  4. WinCE EBOOT中的BootPart分析
  5. mvn install java版本,maven的打包命令--assemblyinstall和maven update之后jdk版本变回1.5的问题...
  6. 快毕业才发现自己找不到工作,为什么实习经历如此重要?
  7. Visual C++ MFC/ATL开发-提高篇
  8. 我写了一个“文本转手写”神器来搞定作业!
  9. 2018年IEEE Fellow名单:32位中国学者入选,清华成最大赢家
  10. php7从基础到商业实战,TP5从基础到项目实战全套
  11. sphinx下的max_matches取值对SetLimits的影响
  12. Redis 解决了哪些问题?
  13. MPC5744P-时钟模块
  14. 打开catia界面全是白色怎么办_别输在细节上!CATIA零件表面写字技巧
  15. html5中的function,js中function函数的使用方法
  16. element-ui tree全部展开和全部折叠
  17. 交叉编译xorg-server
  18. 加速Pytorch安装的速度
  19. 股票大作手回忆录(读书笔记)
  20. 信奥中的数学:加法原理和乘法原理

热门文章

  1. 分享一个用Axure写的PRD文档
  2. 2021中国集成电路行业投资市场研究报告
  3. 为什么有些女孩在发现渣男的真面目以后,还喜欢他们?
  4. 产品经理如果有捷径,那可能是多读书
  5. 鲲鹏服务器的作用,眼见为实,华为鲲鹏架构服务器生态大揭秘
  6. python --version没输出_如何在Linux上安装Python
  7. 大数据场景中语言虚拟机的应用和挑战
  8. 【2017年第1期】智慧城市多源异构大数据处理框架
  9. 作者:姚阳(1979-),女,广州市社会科学院经济学副研究员。
  10. 作者:钱卫宁,华东师范大学数据科学与工程研究院教授、博士生导师。