import requests
import math
import pandas as pd
import time
from lxml import etreedef get_json(url, num,i):'''''从网页获取JSON,使用POST请求,加上头部信息'''headers = {'Connection': 'keep-alive','Cache-Control': 'max-age=0','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3','Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?px=default&city={}'.format(i),'Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7',}params = (('labelWords', ''),('fromSearch', 'true'),('suginput', ''),)s = requests.Session()
s.headers.update(headers)response = s.get('https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?px=default&city={}#filterBox'.format(i), params=params)data = {'first': 'true','pn':num,'kd':'数据分析'}r = s.post('https://www.lagou.com/jobs/positionAjax.json?px=default&city={}&needAddtionalResult=false'.format(i), data=data, headers={'Origin': 'https://www.lagou.com','X-Anit-Forge-Code': '0','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Accept': 'application/json, text/javascript, */*; q=0.01','Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?px=default&city={}'.format(i),'X-Requested-With': 'XMLHttpRequest','X-Anit-Forge-Token': 'None',
})
# 得到包含职位信息的字典
r.encoding='utf-8'
page = r.json()
print(r.text)
return pagedef get_page_num(count):'''''计算要抓取的页数'''# 每页15个职位,向上取整res = math.ceil(count / 15)# 拉勾网最多显示30页结果if res > 30:return 30else:return res
#对职位职责进行解析def get_detail_ifo(position_id):try:headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9','Cache-Control': 'max-age=0','Connection': 'keep-alive','DNT': '1','Host': 'www.lagou.com','Upgrade-Insecure-Requests': '1','User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}  # 每个职位,随机选择一个User-Agents = requests.Session()  # 创建会话s.headers.update(headers)  # 需要设置headers信息,否则返回登陆页面s.get('http://www.lagou.com')  # session首先访问首页,获得cookiesr = s.get('https://www.lagou.com/jobs/%s.html'%str(position_id))# print(r.text)html = etree.HTML(r.text)a = html.xpath('//*[@id="job_detail"]/dd[2]/div/p/text()')return aexcept Exception as e:print(e)return 'NAN'def get_page_info(jobs_list):'''''对一个网页的职位信息进行解析,返回列表'''page_info_list = []for i in jobs_list:print(i)job_info = []#城市job_info.append(i['city'])job_info.append(i['companyFullName'])job_info.append(i['companyShortName'])job_info.append(i['companySize'])job_info.append(i['financeStage'])job_info.append(i['district'])job_info.append(i['positionName'])job_info.append(i['workYear'])job_info.append(i['education'])job_info.append(i['salary'])job_info.append(i['positionAdvantage'])job_info.append(i['jobNature'])job_info.append(i['industryField'])position_id=i['positionId']job_info.append(get_detail_ifo(position_id))time.sleep(10)page_info_list.append(job_info)return page_info_listdef main():#一线与新一线citycitylist=['%E6%AD%A6%E6%B1%89','%E5%AE%81%E6%B3%A2','%E5%8C%97%E4%BA%AC','%E4%B8%8A%E6%B5%B7','%E5%B9%BF%E5%B7%9E','%E6%B7%B1%E5%9C%B3','%E6%88%90%E9%83%BD','%E6%9D%AD%E5%B7%9E','%E9%87%8D%E5%BA%86','%E8%A5%BF%E5%AE%89','%E8%8B%8F%E5%B7%9E','%E5%A4%A9%E6%B4%A5','%E5%8D%97%E4%BA%AC','%E9%95%BF%E6%B2%99','%E9%83%91%E5%B7%9E','%E4%B8%9C%E8%8E%9E','%E9%9D%92%E5%B2%9B','%E6%B2%88%E9%98%B3','%E5%AE%81%E6%B3%A2','%E6%98%86%E6%98%8E']for i in citylist:url='https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?px=default&city={}#filterBox'.format(i)# 先设定页数为1,获取总的职位数page_1 = get_json(url, 1,i)# print(page_1)total_count = page_1['content']['positionResult']['totalCount']num = get_page_num(total_count)total_info = []time.sleep(20)print('职位总数:{},页数:{}'.format(total_count, num))for n in range(1, num + 1):# 对每个网页读取JSON, 获取每页数据page = get_json(url, n,i)jobs_list = page['content']['positionResult']['result']page_info = get_page_info(jobs_list)total_info += page_infoprint('已经抓取第{}页, 职位总数:{}'.format(n, len(total_info)))time.sleep(30)# 将总数据转化为data frame再输出df = pd.DataFrame(data=total_info,columns=['p公司省市','公司全名', '公司简称', '公司规模', '融资阶段', '区域', '职位名称', '工作经验', '学历要求', '工资', '职位福利','工作类型','企业领域','职位要求'])df.to_csv('lagou_job汇总最终.csv', index=False,mode='a')print(i,'已完成')if __name__ == "__main__":main()

最终包含‘公司省市’,‘公司全名’, ‘公司简称’, ‘公司规模’, ‘融资阶段’, ‘区域’, ‘职位名称’, ‘工作经验’, ‘学历要求’, ‘工资’, ‘职位福利’,‘工作类型’,‘企业领域’,'职位要求’等信息,写的比较笨重,欢迎批评指正。

python爬虫——爬取拉勾网一线与新一线城市职位信息相关推荐

  1. python爬虫——爬取拉勾上的职位信息

    爬取拉勾网站岗位数据 1.调用网页 查找网页链接规律 写一个for循环,爬取每一个网页的职位信息 def down():for i in range(1,4):if i == 1:strUrl = & ...

  2. python爬虫-爬取boss直聘的职位信息

    爬取boss直聘的相应的职位信息: 一个同学今天想找工作,问我有什么好单位,关键我也不清楚,于是我去各大招聘网站搜索了下,有很多招聘信息,看的我眼花缭乱,刚看完的职位,忘记收藏又过去搜索,感觉太麻烦, ...

  3. Python爬虫爬取链家网上的房源信息练习

    一 原链接:用Python爬虫爬取链家网上的房源信息_shayebuhui_a的博客-CSDN博客_python爬取链家 打开链家网页:https://sh.lianjia.com/zufang/  ...

  4. python爬虫爬取微信公众号小程序信息

    python爬虫爬取微信公众号小程序信息 爬取内容 某汽车维修信息提供的维修店名称,地点以及电话(手机)号码 爬取步骤 啥也别管,先抓包看看,在这里,博主使用的抓包软件是charles 抓包:将网络传 ...

  5. python爬虫-爬取微博转评赞data信息

    利用python简单爬取新浪微博(转发/评论/点赞/blog文本)信息 import requests import json from jsonpath import jsonpath import ...

  6. python爬虫: 爬取拉勾网职位并分析

    文章目录 0. 前言 1. 用到的软件包 2. 解析网页 3. 数据清洗 4. 词云 5. 描述统计 6. 实证统计 7. 完整代码 7.1 爬虫部分的代码 7.2 数据分析部分的代码 0. 前言 本 ...

  7. python爬虫爬取拉勾网职业信息

    一.前言 最近想做一份关于拉勾网数据分析类职业的报告,便顺手写了个简单的爬虫,记录分享如下. 二.思路整理 1.首先我们打开拉勾网,并搜索""数据分析"",显示 ...

  8. 【爬虫】应用Python爬虫爬取豆瓣租房上的帖子信息

    GitHub项目地址:https://github.com/Donvink/Spider.BC 哔哩哔哩代码讲解:https://b23.tv/waSfUa CSDN博客地址:https://blog ...

  9. python爬虫爬取Boss直聘网招聘信息

    学校给我们大三同学找了一个培训组织,做了10天的实训,我学习的是python,最后是以一个爬虫程序为结业作业,就着这个实训,顺便发一个博客记录一下.考虑到我们即将就业,所以准备爬一个招聘网站,最终决定 ...

  10. Python爬虫爬取豆瓣不同分类书籍详细信息

    文章目录 1.问题来源 2.爬虫代码的组成 3.代码实现 4.运行结果 1.问题来源 这学期有一门软件开发实战的课程,我们组在做一个书籍交易平台.既然是书籍交易平台重要的图书的获取肯定必不可少,而豆瓣 ...

最新文章

  1. 微软 AI 设计原则:成为弱者,再带来惊喜
  2. 远程接入构建企业信息的计划时代--极通EWEBS
  3. leetcode算法题--新21点★
  4. pytorch笔记:pytorch的乘法
  5. [Java基础]并发修改异常
  6. numpy 和tensorflow 中的乘法
  7. SoapSerialization——手机号码归属地
  8. python自动获取邮件数据_Python 获取测试报告内容并发送邮件
  9. Linux 2.6 和安卓一样吗,Linux2.4和Linux2.6设备驱动的一些区别
  10. MongoDB 覆盖索引查询
  11. 两种预处理命令的写法的区别
  12. 手机APP的常见功能测试用例
  13. 都有哪些查找和下载英文文献的方法?
  14. LDAP——实现用户统一登录管理
  15. 仙侣情缘之麒麟劫java_《仙侣情缘之麒麟劫》详细流程攻略[多图]
  16. 连接Charles后,手机无法上网
  17. linux怎么用水星无线,用手机设置水星路由器步骤_手机设置mercury无线路由器-192路由网...
  18. 如何登录虚拟主机服务器,如何登录虚拟主机服务器
  19. spacedesk-把ipad变成显示器-真香经验全面分享
  20. 小米手机产品全球不再使用“MI”品牌,改用“xiaomi”全称品牌

热门文章

  1. 手机之家签名工具_魔力签 v1.3已更新内置资源amp;越狱工具
  2. 解决bootstrap中模态框打开时页面发生一瞬间移动
  3. 移动电视一直显示Android,移动机顶盒恢复出厂设置后显示android正在升级?
  4. 情感日记:用科学的方法追女孩(转)
  5. 同一局域网建立ftp服务器实现文件共享
  6. 五险一金 ,即将毕业的每个人都看看吧
  7. matlab两个单引号是什么意思,两个单引号什么时候用
  8. ntfs文件系统服务器版,详解NTFS文件系统+NTFS 文件系统解析
  9. APISpace 行驶证OCR API
  10. 如何处理春节效应——若干券商研究团队的经验