前言

来到BOOS直聘

搜索python

打开控制台,查看请求发现,页面数据不是动态加载

所以直接复制当前页面链接进行爬取,经过多次的爬取之后

。。。。。。。

失策失策,以前爬取别的网站从没有这么严格的反爬虫机制,没到到翻车了。。

偷偷告诉大家一个小技巧:虽然被禁止访问了,但登录后就又可以访问了,嘿嘿!可惜我当时不知道,事后才发现,可惜。

现在这样只能使用IP代理了
使用IP代理参考以下文章
Python爬虫避坑IP代理教程避坑(reuqests和selenium的ip代理)

建立boos数据库

boos建表语句

CREATE TABLE `boos` (`id` int(11) NOT NULL AUTO_INCREMENT,`title` varchar(100) DEFAULT NULL,`company` varchar(100) DEFAULT NULL,`price` varchar(100) DEFAULT NULL,`education` varchar(100) DEFAULT NULL,`text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,`introduce` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci,`address` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=99 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

完整代码及注释分析

import requests
from bs4 import BeautifulSoup
import time
import pymysql#控制爬取页数
num = 2#插入语句
sql = "insert into boos(id,title, company, price, education, text, introduce ,address) values(null,%s,%s,%s,%s,%s,%s,%s)"#请求头
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36",#爬取boos直聘cookie必不可少,参考图1"cookie": "_uab_collina=159575841104312945170807; __zp__pub__=; __c=1595890401; lastCity=100010000; JSESSIONID=""; _bl_uid=vLkaCdRI5j77gqrsIh0gbF4mC44z; sid=sem_pz_bdpc_dasou_title; __g=sem_pz_bdpc_dasou_title; __l=l=%2Fwww.zhipin.com%2F&r=https%3A%2F%2Fwww.google.com%2F&friend_source=0&g=%2Fwww.zhipin.com%2F%3Fsid%3Dsem_pz_bdpc_dasou_title&friend_source=0; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1595893052,1595903578,1595903959,1595906815; t=EPTZCBdCrM30pa4h; wt=EPTZCBdCrM30pa4h; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1595913530; __a=50500966.1595758411.1595862833.1595890401.177.4.124.36; __zp_stoken__=67beaGmFLZg0RXnJQY3cBIzMicU9jYzIZF1VdYXwsKBQkPCwGb0tdGEcsOHITTCwFWi49AjoIYy5BJTgsdSFCBVEoc1kTdgEWRSMQRTg3IBNgSQ5DPHsvDSFNcwokCHtOGBd4fT93SAUJYTk%3D"
}#IP代理
proxy = {'https': '61.178.118.86:8080'
}#爬取数据
def Crawling(cur,conn,response):#引入全局变量global numglobal sql# 使用 lxml XML解析器data_list = BeautifulSoup(response.text, "lxml")#拿到所有的li标签然后遍历,参考图2#由于li没有class什么的,我们找到搜索li的父标签定位,再找下面的所有lili_list = data_list.find(class_="job-list").find_all("li")#遍历for data in li_list:bs = BeautifulSoup(str(data), "lxml")#职位,参考图3title = bs.find("a")["title"].strip()url = "https://www.zhipin.com/" + bs.find("a")['href']# 公司,图4company = bs.find(class_="company-text").find(class_="name").text# 公司福利 图5education = bs.find(class_="info-desc").text# 薪资 图6price = bs.find(class_="red").text# print(title+"--"+company+"--"+price+"--"+education)# # 请求详情页,进行数据爬取time.sleep(1)page_source = requests.get(url=url, headers=headers)page_source.encoding = "utf-8"page_bs = BeautifulSoup(str(page_source.text), "lxml")# 岗位职责,图7text = page_bs.find(class_="text").text.strip()#print(text)#print("+"*100)# 公司介绍,参考图8#有的公司没有介绍,爬取的时候会异常,我们呢处理异常,没有的时候直接给无介绍 try:#因为这里的class值也是text,由于find的特性只会返回匹配到的第一个值,所以我们选择定位他的父标签,再找它introduce = page_bs.find(class_="job-sec company-info").find(class_="text").text.strip()except:introduce = "无介绍"# 工作地址,图9#有的公司地址后带有502,我们把它替换成空串address = page_bs.find(class_="location-address").text.replace("502","")#执行sql,提交事务cur.execute(sql, (title, company, price, education, text, introduce, address))conn.commit()#多页爬取if num < 4:#链接分析,图10next_url = "https://www.zhipin.com/c100010000/?query=python&page="+str(num)+"&ka=page-"+str(num)num += 1next_data = requests.get(url=next_url,headers=headers,proxies=proxy)next_data.encoding = "utf-8"#爬取Crawling(cur,conn,next_data)else:return cur,conn#初始化mysql连接
def init_mysql():dbparams = {'host': '127.0.0.1','port': 3306,'user': '数据库账号','password': '数据库密码','database': 'boos', #数据库名'charset': 'utf8'}conn = pymysql.connect(**dbparams)cur = conn.cursor()return cur,conn#关闭数据库连接
def close(cur,conn):cur.close()conn.close()#起始
if __name__ == "__main__":#print("="*40)#防止请求频繁,关闭多余链接,可参考博主的文章requests.DEFAULT_RETRIES = 5s = requests.session()s.keep_alive = False#请求链接,只需更改url即可爬取自己想爬取的数据start_url = "https://www.zhipin.com/c100010000/?query=python&page=1&ka=page-1"response = requests.get(url=start_url, headers=headers,proxies=proxy)time.sleep(2)response.encoding = "utf-8"# print("="*40)#查看请求状态码,200为成功print(response.status_code)cur,conn = init_mysql()#爬取数据cur,conn = Crawling(cur,conn,response)#关闭数据库连接close(cur,conn)

图片辅助分析

图1

图2

图3

图4

图5

图6

图7

图8

图9

图10

运行结果

'NoneType' object has no attribute 'find_all'

BOOS直聘的反爬虫机制确实厉害,如果报以上错误,可以通过更换cookie或者更换代理IP来解决
实在不行,那就用不用代理ip了,还是用本机的,小技巧在上面已经教给大家了。

源代码获取加群:1136192749

2020最新BOOS直聘爬取保姆式教程,你值得拥有!相关推荐

  1. 爬虫系列---scrapy post请求、框架组件和下载中间件+boss直聘爬取

    一 Post 请求 在爬虫文件中重写父类的start_requests(self)方法 父类方法源码(Request): def start_requests(self):for url in sel ...

  2. python boss直聘爬取2019-09

    之前求职 数据分析师岗位 爬取的boss直聘代码 分享给大家 将爬取的数据直接存在mysql数据库中 以便后续分析 import requests from lxml import etree imp ...

  3. python使用selenium爬取boos,100%爬取成功,绕过cookie

    selenium也可用于爬虫,有时它比request库要强,这里我们就爬取boos招聘网站,爬过的同学就知道boos的反爬很难,如果不是大佬级别的人,很难攻克它的反爬机制,boos的cookie好像是 ...

  4. 最新 用Python 批量爬取网上图片

    标题 最新 用Python 批量爬取网上美眉图片 故事是这样的:七月份给室友说,我要开始学习Python了.室友一脸懵,并问我Python是啥?确实对于我这个小城市来说Python之风还没有吹到我们这 ...

  5. Python爬虫实战,pytesseract模块,Python实现BOOS直聘拉勾网岗位数据可视化

    前言 利用Python实现BOOS直聘&拉勾网岗位数据可视化.废话不多说. 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: requests模块 pyspider模 ...

  6. Boos直聘行业数据获取、json解析

    开发一个招聘类的项目,网站需要行业数据 目标:将行业数据填充进数据库 过程分为两步:1:获取数据  2:解析数据放入数据库 1.获取数据 进入boos直聘网站首页 红框框住的就是我们要获取的行业数据了 ...

  7. 百度百聘爬取详细分析

    这两天我一直在爬取百度百聘这个招聘网站,里面的工作还是很多的,都是从其他招聘网站上获取下来了 下面我就给大家详细分析一下这次我在百度百聘爬取时的思路和遇到的问题 和 解决办法提供大家参考: 爬取数据的 ...

  8. 超简单,Python爬取阴阳师式神视频

    Python爬取阴阳师官网式神CG,附完整代码 爬取阴阳师式神宣传CG 网页分析 教程开始 1 发送网页请求 使用第三方库requests来获取网页 使用BeautifulSoup解析网页 2 获取目 ...

  9. Python之 - 使用Scrapy建立一个网站抓取器,网站爬取Scrapy爬虫教程

    Scrapy是一个用于爬行网站以及在数据挖掘.信息处理和历史档案等大量应用范围内抽取结构化数据的应用程序框架,广泛用于工业. 在本文中我们将建立一个从Hacker News爬取数据的爬虫,并将数据按我 ...

最新文章

  1. JavaScript异步流程控制的前世今生
  2. ASP.NET之SOAP的发送、接收与处理类 [转载]
  3. springMVC-配置Bean
  4. python培训的课时是多久_如何快速学习python,学习python的最短时间是多久?
  5. 艾伦图灵_Java英雄:丹·艾伦
  6. ASP.NET 抓取网页内容
  7. 光耀卡服务器维修,3月28日服务器更新维护公告
  8. 转:vim----复制粘贴
  9. mysql关系模式怎么画_关系数据库与mysql
  10. 生产环境运行Docker的9个关键决策
  11. Multi-thread--C++11中std::condition_variable的使用
  12. Atitit ever note org log t99 目录 1. data 1 2. Sik dsk zip mode 1 3. Local exted stat 2 4. Recy 3 1
  13. 阿里云原生“因云而生”心智大图重磅发布
  14. windows日趋苹果化?win11到Win12,妥妥MacOS的复刻版
  15. 设置win10锁屏壁纸为桌面背景
  16. java面试宝典:留着慢慢看
  17. 隔行插入行——《超级处理器》应用
  18. 2020面试题合集之吊打面试官系列(一),Android中为什么需要Handler
  19. JVM 垃圾回收概述
  20. Android 天气APP(一)开发准备

热门文章

  1. 市盈率和股票价格的关系
  2. 从零开始的人工智能学习(序)
  3. TypeScript+Vue3.0笔记
  4. 玩转X-CTR100 l STM32F4 l ESP8266串口WIFI模块
  5. 《机械设计基础》在线平时作业1
  6. nagios 安装问题解析
  7. 华为注册鸿蒙商标的故事,华为注册“鸿蒙”商标:意在把传说化为现实奇迹
  8. TortoiseGit 常用操作说明
  9. C#客户端在线更新—如此简单??
  10. Oracle字符串拆分