毕设收集招聘数据写的一个小爬虫,比较简单,就是爬了一会职友集的反爬会检测到,需要重新开始爬(PS:把浏览器访问职友集request header 里面的数据全部都放到requests的headers里面或许效果会好一点,我没有放全 你们可以自己试一下,或者设置代理访问比较好)
这里是按地区爬网络安全工程师的,稍微改改就能自己用了。

建议
用自己登陆后的request header 里面的数据 这样报错的概率比较小。
F12->NetWork->Doc 然后找到request header 里的数据复制下来按照格式放好。

# -*- coding: utf-8 -*-
"""
Created on Sat Feb 20 18:15:25 2021@author: zzy
"""from bs4 import BeautifulSoup as bf
import requests
import time
from collections import deque
import os
import json
import csvdef get():items=[]posqueue,numqueue=deque([]),deque([])#北京 上海 深圳 广州# 'https://www.jobui.com/jobs?cityKw=%E5%8C%97%E4%BA%AC&jobKw=%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88&n=','https://www.jobui.com/jobs?jobKw=%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88&cityKw=%E4%B8%8A%E6%B5%B7&n=','https://www.jobui.com/jobs?jobKw=%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88&cityKw=%E6%B7%B1%E5%9C%B3&n=',urls=['https://www.jobui.com/jobs?cityKw=%E5%8C%97%E4%BA%AC&jobKw=%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88&n=','https://www.jobui.com/jobs?jobKw=%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88&cityKw=%E4%B8%8A%E6%B5%B7&n=','https://www.jobui.com/jobs?jobKw=%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88&cityKw=%E6%B7%B1%E5%9C%B3&n=','https://www.jobui.com/jobs?jobKw=%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%B7%A5%E7%A8%8B%E5%B8%88&cityKw=%E5%B9%BF%E5%B7%9E&n=']cookie='jobui_p=1613901762779_44902703; AXUDE_jobuiinfo=PKHSerewtz; PHPSESSID=94f0q14lsqg18n9706hppdfha4; isAccessToken=4C5DC7967AE3A35CF1FD9F9DC3234A96; isloginType=qq; isloginOpenID=A0978770BC02EE56FF01E4143279F5AA; isloginStatus=fDR6uZuIgBc%3D; jobui_jobNotifyTime=1613901778; jobui_companyNotifyTime=1613901778; TN_VisitCookie=2; TN_VisitNum=2; jobui_notifiset=1; Hm_lvt_8b3e2b14eff57d444737b5e71d065e72=1613901763,1613901778; Hm_lpvt_8b3e2b14eff57d444737b5e71d065e72=1613901778; jobui_notifyTime=1613901778; jobui_login_guide_popup=1'headers = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.71 Safari/537.36','Cookie':cookie}for url in urls:time.sleep(1)wb_data = requests.get(url, headers=headers)print(wb_data)#请求成功200soup = bf(wb_data.content, 'lxml')al=soup.find('span',attrs={'class':'sort-cut-result'}).span.get_text().strip()pos=str(soup.find('strong').get_text())[0:2]#print(pos)rang=int((int(al)/15))+2posqueue.append(pos)numqueue.append(rang)print(posqueue,numqueue)for url in urls:time.sleep(1)wb_data = requests.get(url, headers=headers)# print(wb_data)#请求成功200soup = bf(wb_data.content, 'lxml')pos=posqueue.popleft() #print(pos)rang=numqueue.popleft()print(pos,rang)for i in range(1,rang):wb_data = requests.get(url+str(i), headers=headers)time.sleep(1)soup = bf(wb_data.content, 'lxml')# print(soup)sp=soup.find('div',attrs={'class':'j-recommendJob'})# print(sp)tagsli=sp.find_all('div',attrs={'class':'c-job-list'})# print(tagsli)for tag in tagsli:item={'Company_name':'' , 'City':'' , 'Job':'' , 'Required':'' , 'NumOfStaff':'','CompanyType':'','Salary':''}item['Company_name']=tag.find('a',attrs={'class':'job-company-name'}).get_text().strip()item['City'] =pos                 #tag.find( 'span', attrs={'class':'frs-author-name-wrap'}).a.get_text().strip()item['Job'] = tag.find( 'a', attrs={'class' :'job-name'}).get_text().strip()required = tag.find( 'div', attrs={'class':'job-desc'}).find_all('span')#print(required[0].get_text(),required[1].get_text(),required[2].get_text())item['Required']=required[0].get_text().strip()+'|'+required[1].get_text().strip()company_information =tag.find('span', attrs={'class':'job-desc'}).get_text().strip()if len(company_information.split('|'))>1:item['NumOfStaff']=company_information.split('|')[1].strip()if len(company_information.split('|')[0].strip().split(',')) >1:item['CompanyType'] = company_information.split('|')[0].strip().split(',')[1].strip()else:item['CompanyType'] = company_information.split('|')[0].strip()item['Salary']= required[2].get_text().strip()items.append ( item) print(item,i)print("总数据条数:"+str(len(items)))saveToCsv( items, item, 'zhiyoujidata.csv')def saveToCsv(items,keyword_list,path):"""保存csv方法:param keyword_list: 保存文件的字段或者说是表头:param path: 保存文件路径和名字:param item: 要保存的字典对象:return:"""try:# 第一次打开文件时,第一行写入表头if not os.path.exists(path):with open(path, "w", newline='', encoding='utf-8') as csvfile:  # newline='' 去除空白行writer = csv.DictWriter(csvfile, fieldnames=keyword_list)  # 写字典的方法writer.writeheader()  # 写表头的方法# 接下来追加写入内容with open(path, "a", newline='', encoding='utf-8') as csvfile:  # newline='' 一定要写,否则写入数据有空白行writer = csv.DictWriter(csvfile, fieldnames=keyword_list)for i in range(len(items)):writer.writerow(items[i])  # 按行写入数据print("^_^ write success")except Exception as e:print("write error==>", e)# 记录错误数据with open("error.txt", "w") as f:f.write(json.dumps(items) + ",\n")passif __name__=='__main__':get()

requests 职友集招聘信息爬虫相关推荐

  1. Python爬虫实战之一 - 基于Requests爬取拉勾网招聘信息,并保存至本地csv文件

    Python爬虫实战之二 - 基于Requests抓取拉勾网招聘信息 ---------------readme--------------- 简介:本人产品汪一枚,Python自学数月,对于小白,本 ...

  2. linux运维 职友集,为你介绍一下Linux运维到底是干啥的?

    今天小编为大家带来的文章是关于Linux运维的介绍的,通过本篇文章你可以解决以下疑问: Linux网络运维是什么? 为什么网络运维的人才紧缺? 网络运维学了到底有没有前途? Linux运维是什么? 对 ...

  3. 同程旅行java待遇_同程旅行JAVA工资待遇怎么样 - 同程艺龙 - 职友集

    1.精通Java,熟悉多线程,编程功底扎实;2.熟悉Spring.Spring boot;3.熟悉HTML.CSS.Javascript.Ajax.Json等;4.熟悉oracle.mysql.Pos ...

  4. vse职位的全称_吉利汽车VSE岗(SE5AGBRC-M工资待遇怎么样 - 浙江吉利控股集团有限公司 - 职友集...

    工作职责:作为整车项目管理与SQE之间的沟通平台,确保项目SQE工作有效运行1.依据NPDS和其他项目要求,与采购和项目紧密合作,领导供应商质量的各项推进活动. 2.负责接收项目任务,并在SQE内部进 ...

  5. Djange构建招聘信息爬虫系统

    Djange搭建爬虫系统 Django是一个开放源代码的 Web 应用框架,由 Python 写成.许多成功的项目都使用了这个框架,采用了 MVT 的软件设计模式,即模型(Model),视图(View ...

  6. pwc软件测试工程师面试,普华永道qa工资待遇怎么样 - 普华永道中天会计师事务所(特殊普通合伙) - 职友集...

    该职位来源于猎聘Job Description & Summary A career in Information Technology, within Internal Firm Servi ...

  7. java高级后端研发工程师JD,京东资深后端JAVA研发工程师工资待遇怎么样 - JD京东商城 - 职友集...

    该职位来源于猎聘职责描述:1.独立承担关键功能模块的设计和开发.2.根据需求进行概要设计及详细设计以及模块的实现.3.配合项目经理完成项目实施的技术工作.4.对编写的代码进行模块测试.任职要求:1. ...

  8. mysql dba 工资,好大夫高级mysql dba工资待遇怎么样 - 好大夫在线 - 职友集

    该职位来源于猎聘职位描述:1. 负责生产环境Mysql数据库系统高可用.高性能架构方案,分库分表策略,数据库扩展方案.2. 排查数据库故障,分析和解决疑难问题,提出预防方案:3. 制定数据库监控策略, ...

  9. 阿里巴巴python岗位_阿里python高级开发工程师工资待遇怎么样 - 阿里巴巴集团 - 职友集...

    工作内容 负责TeambitionEnterpriseServer后端系统架构.混合云架构设计及开发工作 面向未来进行复杂业务架构设计,把握复杂系统的设计,确保系统的架构质量,并考虑综合技术成本(开发 ...

  10. 在纬创软件做java_纬创软件Java中高级工程师工资待遇怎么样 - 纬创软件 - 职友集...

    技能要求: 1.扎实的Java基础,熟悉集合,IO,多线程等知识点. 2.熟练使用Spring.Spring MVC.MyBatis.Hibernate.struts2? 等主流开源框架: 3.熟悉s ...

最新文章

  1. 线程与线程池,实例比较。
  2. 09_Redis持久化——AOF方式
  3. SpringBoot-短信验证码-快速入门Demo(含redis)(手把手教你开通阿里云短信服务到写出个最终代码来)
  4. Collections类
  5. 数组的存储与初始化、对象数组、数组作为函数参数
  6. MaxScale中间件部署数据库读写分离
  7. STP RSTP MSTP PVST+学习 (1)
  8. Swift中Class和Struct异同
  9. [Unity3D]脚本中Start()和Awake()的区别
  10. 计算机无法安装ae,Windows10系统AE软件无法安装如何处理
  11. node.js+cocoscreator自研斗地主游戏
  12. win7 正式版安装成功,贴图得瑟一下
  13. Mac 系统 Arduino IDE 找不到开发板端口的解决方法
  14. ROLAP vs MOLAP vs HOLAP
  15. 骞云科技:假如GitLab使用CMP管理PostgreSQL
  16. db_connection.execute(sql_str, *args)执行sql语句
  17. html、css 实现一个漂亮的表格
  18. 计算机中缺少mfc100.dll怎么办,缺少 mfc100u.dll,要怎么处理啊
  19. node.js的认识与了解3
  20. 如何批量将 Doc 格式的 Word 文档转为 Docx 格式

热门文章

  1. 问题:Permission denied: user=dr.who, access=WRITE, inode=“/“:hadoop:supergroup:drwxr-xr-x
  2. 中国云计算的发展历史
  3. js/vue两张图片合成一张画布
  4. 深度学习与神经网络的关系
  5. 三级指标 主成分分析_一文看懂主成分分析(PCA)
  6. 【深度学习入门案例】Senta情感分析
  7. editplus编辑器使用-快速开始(editplus通过sftp协议远程编辑文件)
  8. python属于计算机几级,Python语言被列入全国计算机等级考试科目
  9. 带你Dart带你Diao之重要概念
  10. 试题 算法训练 调和数列问题---蓝桥杯