1. #今日目标
  2.  
  3. **拉勾网python开发要求爬虫**
  4.  
  5. 今天要爬取的是北京python开发的薪资水平,招聘要求,福利待遇以及公司的地理位置。
  6. 通过实践发现除了必须携带headers之外,拉勾网对ip访问频率也是有限制的。一开始会提示 '访问过于频繁',继续访问则会将ip拉入黑名单。不过一段时间之后会自动从黑名单中移除。
  7. 针对这个策略,我们可以对请求频率进行限制,这个弊端就是影响爬虫效率。其次我们还可以通过代理ip来进行爬虫。网上可以找到免费的代理ip,但大都不太稳定。付费的价格又不太实惠。
  8. 具体就看大家如何选择了。
  9. **思路**
  10. 通过分析请求我们发现每页返回15条数据,totalCount又告诉了我们该职位信息的总条数。
  11. 向上取整就可以获取到总页数。然后将所得数据保存到csv文件中。这样我们就获得了数据分析的数据源!
  12. post请求的Form Data传了三个参数
  13. first :是否首页(并没有什么用)
  14. pn:页码
  15. kd:搜索关键字
  16.  
  17. 代码实现
  18. ```
  19. # 获取请求结果
  20. # kind 搜索关键字
  21. # page 页码 默认是1
  22. def get_json(kind, page=1,):
  23. # post请求参数
  24. param = {
  25. 'first': 'true',
  26. 'pn': page,
  27. 'kd': kind
  28. }
  29. header = {
  30. 'Host': 'www.lagou.com',
  31. 'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
  32. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
  33. }
  34. # 设置代理
  35. proxies = [
  36. {'http': '140.143.96.216:80', 'https': '140.143.96.216:80'},
  37. {'http': '119.27.177.169:80', 'https': '119.27.177.169:80'},
  38. {'http': '221.7.255.168:8080', 'https': '221.7.255.168:8080'}
  39. ]
  40. # 请求的url
  41. url = 'https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false'
  42. # 使用代理访问
  43. # response = requests.post(url, headers=header, data=param, proxies=random.choices(proxies))
  44. response = requests.post(url, headers=header, data=param, proxies=proxies)
  45. response.encoding = 'utf-8'
  46. if response.status_code == 200:
  47. response = response.json()
  48. # 请求响应中的positionResult 包括查询总数 以及该页的招聘信息(公司名、地址、薪资、福利待遇等...)
  49. return response['content']['positionResult']
  50. return None
  51. ```
  52. 接下来我们只需要每次翻页之后调用 get_json 获得请求的结果 再遍历取出需要的招聘信息即可。
  53. ```
  54. if __name__ == '__main__':
  55. # 默认先查询第一页的数据
  56. kind = 'python'
  57. # 请求一次 获取总条数
  58. position_result = get_json(kind=kind)
  59. # 总条数
  60. total = position_result['totalCount']
  61. print('{}开发职位,招聘信息总共{}条.....'.format(kind, total))
  62. # 每页15条 向上取整 算出总页数
  63. page_total = math.ceil(total/15)
  64.  
  65. # 所有查询结果
  66. search_job_result = []
  67. #for i in range(1, total + 1)
  68. # 为了节约效率 只爬去前100页的数据
  69. for i in range(1, 100):
  70. position_result = get_json(kind=kind, page= i)
  71. # 每次抓取完成后,暂停一会,防止被服务器拉黑
  72. time.sleep(15)
  73. # 当前页的招聘信息
  74. page_python_job = []
  75. for j in position_result['result']:
  76. python_job = []
  77. # 公司全名
  78. python_job.append(j['companyFullName'])
  79. # 公司简称
  80. python_job.append(j['companyShortName'])
  81. # 公司规模
  82. python_job.append(j['companySize'])
  83. # 融资
  84. python_job.append(j['financeStage'])
  85. # 所属区域
  86. python_job.append(j['district'])
  87. # 职称
  88. python_job.append(j['positionName'])
  89. # 要求工作年限
  90. python_job.append(j['workYear'])
  91. # 招聘学历
  92. python_job.append(j['education'])
  93. # 薪资范围
  94. python_job.append(j['salary'])
  95. # 福利待遇
  96. python_job.append(j['positionAdvantage'])
  97.  
  98. page_python_job.append(python_job)
  99.  
  100. # 放入所有的列表中
  101. search_job_result += page_python_job
  102. print('第{}页数据爬取完毕, 目前职位总数:{}'.format(i, len(search_job_result)))
  103. # 每次抓取完成后,暂停一会,防止被服务器拉黑
  104. time.sleep(15)
  105. ```
  106. ok!数据我们已经获取到了,最后一步我们需要将数据保存下来。
  107. ```
  108. # 将总数据转化为data frame再输出
  109. df = pd.DataFrame(data=search_job_result,
  110. columns=['公司全名', '公司简称', '公司规模', '融资阶段', '区域', '职位名称', '工作经验', '学历要求', '工资', '职位福利'])
  111. df.to_csv('lagou.csv', index=False, encoding='utf-8_sig')
  112. ```
  113. 运行后结果如下:

拉勾网python开发要求爬虫的更多相关文章

  1. Python 开发轻量级爬虫08

    Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...

  2. Python 开发轻量级爬虫07

    Python 开发轻量级爬虫 (imooc总结07--网页解析器BeautifulSoup) BeautifulSoup下载和安装 使用pip install 安装:在命令行cmd之后输入,pip i ...

  3. Python 开发轻量级爬虫06

    Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...

  4. Python 开发轻量级爬虫05

    Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器 ...

  5. Python 开发轻量级爬虫04

    Python 开发轻量级爬虫 (imooc总结04--url管理器) 介绍抓取URL管理器 url管理器用来管理待抓取url集合和已抓取url集合. 这里有一个问题,遇到一个url,我们就抓取它的内容 ...

  6. Python 开发轻量级爬虫03

    Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监 ...

  7. Python 开发轻量级爬虫02

    Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url, ...

  8. Python 开发轻量级爬虫01

    Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...

  9. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

随机推荐

  1. THUSC2016 成绩单

    题目链接:Click here Solution: 我们设\(f[l][r][x][y]\)表示在原区间\(l\sim r\) 内还未被取走的值最大为\(x\)最小为\(y\)时的代价,这里我们只考虑 ...

  2. SpringBoot整合Elastic-job(详细)

    一 作业分片1.分片概念作业分片是指任务的分布式执行,需要将一个任务拆分为多个独立的任务项,然后由分布式的应用实例分别执行某一个或几个分片项.例如:Elastic-Job快速入门中文件备份的例子,现有 ...

  3. 微信小程序_(组件)form表单

    Form表单.switch开关.数值选择器效果 官方文档:传送门 点击提交表单(按钮,提交开关,数值选择器,输入文本中)的值,显示在控制台上,点击重置,重置表单中的值. 实现过程 form表单,添加f ...

  4. 详解vue的diff算法原理

    我的目标是写一个非常详细的关于diff的干货,所以本文有点长.也会用到大量的图片以及代码举例,目的让看这篇文章的朋友一定弄明白diff的边边角角. 先来了解几个点... 1. 当数据发生变化时,vue ...

  5. 分布式-信息方式-ActiveMQ支持的传输协议和配置

                             ActiveMQ支持的传输协议和配置■ Connector: ActiveMQ提供的,用来实现连接通讯的功能.包括: client-to-broker ...

  6. git多人参与的项目 -> 分支代码如何合并到主干

    个人理解:合并分支时候就是当前分支,与别的分支先合并一遍,然后解决分支中存在的所有冲突,之后将本地分支代码提交到git远程仓库,之后切换主干分支 ,将主干分支与分支内容合并,解决冲突, 在提交主干分支 ...

  7. linux面试常见

    https://www.cnblogs.com/wanghuaijun/p/7421008.html 一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 ...

  8. TCP定时器 之 TIME_WAIT定时器

    概述 在FIN_WAIT_2收到对端发来的FIN,并回复ACK之后,会进入TIME_WAIT状态,此时添加定时器,定时器超时会将tw控制块从ehash和bhash中删除,并且释放tw控制块: 启动定时 ...

  9. numpy小记

    import numpy as np # a=np.array([[1,3,2],[4,5,6]]) print(a) a=np.arange(1,13).reshape((3,4))#生成一个3行4 ...

  10. redhat7.2配置yum源

      版权声明:声明:本博客欢迎转发,但请保留原作者信息!本站文章皆基于公开来源信息,仅代表作者个人观点 https://blog.csdn.net/wylfengyujiancheng/article ...