BOSS是我很早就实现数据爬取的网站,那会直接用request即可,最近再次尝试以前的代码发现,它做了一些反爬处理,当你直接访问例如https://www.zhipin.com/c101210100/b_西湖区/?query=数据分析杭州这样的网址,会进行一个二次跳转,就算获取跳转后的网址再访问也是不行的,因为它的cookies里有一个_zp_stoken_,是js加密生成的,尽力一番之后宣告难以破解,直接祭出大杀器selenium+随机user-agent,轻松解决

代码已更新2020.3.18

思路就是用selenium进入要爬取的页面,通过随机的user-agent高效爬取数据,我这边随机的user-agent是保存在本地文件headers.csv中的,需要自取https://pan.baidu.com/s/11lBIclOHvVpBdgp3NyY0nA提取码 ar5z

# -*- coding: utf-8 -*-
import json
import os
import re
from urllib.parse import urlencode
import fake_useragent
from scrapy.selector import Selector
import requests
import time
from lxml import etree
from selenium import webdriver
import pandas as pd'''
爬取BOSS职位
'''
# 方法二,从本地文件夹获取
location = os.getcwd() + 'headers.csv'
ka = fake_useragent.UserAgent(path=location, verify_ssl=False, use_cache_server=False)# 构造请求头User-Agent
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','cache - control': 'max - age = 0','referer':'https://www.zhipin.com/','sec-fetch-mode':'navigate','sec-fetch-site':'same-origin','sec-fetch-user':'?1','upgrade-insecure-requests':'1','user-agent': ka.random,'X-Requested-With': 'XMLHttpRequest'}
data_my = []
get_url = 'https://www.zhipin.com/wapi/zpgeek/view/job/card.json?'def main():'https://www.zhipin.com/c101210100/b_西湖区/?query=数据分析杭州'area_list ={'西湖区','余杭区','滨江区','江干区','萧山区','拱墅区','下城区','上城区'}chromedriver_path = 'C:/Users/machenike/Anaconda3/Scripts/chromedriver.exe'# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Seleniumoptions = webdriver.ChromeOptions()options.add_experimental_option('excludeSwitches', ['enable-automation'])driver = webdriver.Chrome(executable_path=chromedriver_path, options=options)driver.maximize_window()for area in area_list:loginurl = 'https://www.zhipin.com/c101210100/b_' +area+'/?query=数据分析杭州'driver.get(loginurl)time.sleep(3.5)# Selenium为我们提供了get_cookies来获取登录cookiescookies = driver.get_cookies()jsonCookies = json.dumps(cookies)# 把cookies保存在本地with open('bossCookies.json', 'w') as f:f.write(jsonCookies)#获取信息get_detail(driver,area)# 写入本地CSV文件df = pd.DataFrame(data_my)df.to_csv('./shuju.csv', index=None, encoding='utf-8-sig', mode='a')time.sleep(0.5)print('已保存该数据到本地HR.csv文件夹')driver.close()def get_detail(driver,area):source = etree.HTML(driver.page_source)node_list =source.xpath("//div[@class='job-list']/ul/li")# 用来存储所有的item字段\for node in node_list:item = {}# extract() 将xpath对象转换为Unicode字符串item['链接'] = node.xpath(".//div[@class='info-primary']/div[@class='primary-wrapper']/a/@href")[0]item['职位'] = node.xpath(".//div[@class='info-primary']/div[@class='primary-wrapper']/a/div[@class='job-title']/span[1]")[0].textitem['薪资'] = node.xpath(".//div[@class='info-primary']/div[@class='primary-wrapper']/a/div[@class='job-limit clearfix']/span[1]")[0].textitem['工作地点'] = areaitem['工作经验'] = node.xpath(".//div[@class='info-primary']/div[@class='primary-wrapper']/a/div[@class='job-limit clearfix']//p/text()[1]")[0]item['公司名称'] = node.xpath(".//div[@class='info-primary']/div[@class='info-company']/div[@class='company-text']/h3/a")[0].textitem['所处行业'] = node.xpath(".//div[@class='info-primary']/div[@class='info-company']/div[@class='company-text']//p/text()[1]")[0]rong= node.xpath(".//div[@class='info-primary']/div[@class='info-company']/div[@class='company-text']//p/text()[2]")[0]if '人' in rong:item['融资轮']=''else:item['融资轮']=rongtry:item['规模']=node.xpath(".//div[@class='info-primary']/div[@class='info-company']/div[@class='company-text']//p/text()[3]")[0]except:gui = node.xpath(".//div[@class='info-primary']/div[@class='info-company']/div[@class='company-text']//p/text()[2]")[0]if '人' in gui:item['融资轮'] = guielse:item['融资轮'] = ''item['jid'] = node.xpath(".//div[@class='info-primary']/div[@class='primary-wrapper']/a/@data-jid")[0]item['lid'] = node.xpath(".//div[@class='info-primary']/div[@class='primary-wrapper']/a/@data-lid")[0]ajson = get_info(item['jid'], item['lid'])item['岗位职责'] = get_json(ajson)print(item)data_my.append(item)#翻页if  source.xpath('//*[@id="main"]/div/div[3]/div[3]//a[@class="next"]'):next_page=driver.find_element_by_xpath('//*[@id="main"]/div/div[3]/div[3]//a[@class="next"]')driver.execute_script("arguments[0].click();", next_page)time.sleep(3.5)# Selenium为我们提供了get_cookies来获取登录cookiescookies = driver.get_cookies()jsonCookies = json.dumps(cookies)# 把cookies保存在本地with open('bossCookies.json', 'w') as f:f.write(jsonCookies)get_detail(driver,area)def get_info(jid, lid):params = {'jid': jid,'lid': lid}# 获取cookieswith open('bossCookies.json', 'r', encoding='utf-8') as f:listcookies = json.loads(f.read())# 把获取的cookies处理成dict类型cookies_dict = dict()for cookie in listcookies:# 在保存成dict时,只要cookies中的name和valuecookies_dict[cookie['name']] = cookie['value']requests.adapters.DEFAULT_RETRIES = 5s = requests.session()# 关闭多余进程s.keep_alive = False#请求ajax获取岗位职责re = requests.get(get_url + urlencode(params), headers=headers, cookies=cookies_dict)time.sleep(0.2)if re.status_code == 200:vjson = re.json()return vjsonelse:print("获取失败")def get_json(js):#处理字符串,由于返回的岗位职责是一个包含html的json数据,需要处理一下if js:json_content = js.get('zpData').get('html')content = Selector(text=json_content)content_text = content.css(".detail-bottom-text::text").re("[\u4e00-\u9fa5_a-zA-Z0-9]+")cont=''.join(content_text)return contelse:print("未获取数据")if __name__ == '__main__':main()print("结束---------------------------------")

最后是这样的

补充:对于一直在加载中的情况,可能是webdriver的版本比较新吧,被检测出什么了,可以用以下方式打开网页,记得先配置环境变量中的path,改成自己电脑里谷歌浏览器chrome.exe所在路径,亲测可行

# 打开本地chrome,!!!!!!!!需要提前配置环境变量path
os.system('cd "C:\\Program Files (x86)\\Google\\Chrome\\Application"&start chrome.exe --remote-debugging-port=9999 --user-data-dir="C:\selenum\AutomationProfile" "https://www.zhipin.com/job_detail/?ka=header-job"')
chrome_debug_port = 9999
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", f"127.0.0.1:{chrome_debug_port}")
# selenium接管当前网页
driver = webdriver.Chrome(options=chrome_options)

selenium无登录状态爬取Boss直聘相关推荐

  1. 爬虫之爬取Boss直聘

    爬取Boss直聘主要有以下难点: 在不登陆的情况下最多爬十页就会出现手动打码验证 出现大概五六次手动打码后就会封禁ip地址,封禁1天的时间 解决办法 1.切换ip 这里我尝试过很多收费代理,免费代理, ...

  2. 2021selenium+chrome爬取BOSS直聘指定字段热门城市岗位信息

    2021selenium+chrome爬取BOSS直聘指定字段热门城市岗位信息 心得 最终效果 文件概览 要先创建好数据库 和 数据表 这里时mysql数据库 定义搜索关键字 直接上代码 随时用 随时 ...

  3. 【数据分析项目实战】Python爬取BOSS直聘岗位和数据分析

    说明:这是一个数据分析项目全流程(附带项目实例),本篇教程来源于网络,胖哥对此进行了完整的梳理,并把用到的数据+代码完全奉上.如需数据+完整代码可以直接到文章最后获取. 这里面的数据,我只爬取了部分, ...

  4. 爬取boss直聘数据并分析

    爬取boss直聘数据并进行分析 1. 爬取boss直聘数据 因为高匿的代理IP要钱,所以小编只能通过增大时间间隔并利用selenium自动化库模拟人自然浏览网站来爬取数据,最终获得北京,上海,杭州,广 ...

  5. 【python爬虫】在scrapy中利用代理IP(爬取BOSS直聘网)

    同学们好,我又滚回来更新了,这一次我们要爬取的目标是BOSS直聘,BOSS直聘可以说是反爬虫一个很好的例子了,主要在于如果你访问他的次数过多,他就会出现验证码,要求你通过验证才能继续看,这样还算可以, ...

  6. python爬取boss直聘招聘信息_python学习之路-爬取boss直聘的岗位信息

    背景 想了解从事python相关岗位需要具备什么技能,于是就想从招聘网站上的职位需求入手,把信息获取下来后,生成词云,这样就能很直观的看出来哪些技能是python相关岗位需要具备的了. 技术概览 sc ...

  7. 使用python爬取BOSS直聘岗位数据并做可视化(Boss直聘对网页做了一些修改,现在的代码已经不能用了)

    使用python爬取BOSS直聘岗位数据并做可视化 结果展示 首页 岗位信息 岗位详情 薪资表 学历需求 公司排名 岗位关键词 福利关键词 代码展示 爬虫代码 一.导入库 二.爬取数据 1.爬取数据代 ...

  8. 爬取boss直聘“数据分析”工作

    爬取boss直聘数据分析[1.获取数据] 1.背景:面临工作,需要数据支持,看到各大数据源(天池.和鲸社区-),萌生一种自己爬取数据分析工作的信息,将数分融入进找工作的环节中,利用数据分析来分析当前数 ...

  9. java简单爬取Boss直聘招聘基本信息

    准备工作先去https://jsoup.org/download下载一个jsoup.jar;熟悉web前端知识:熟悉浏览器抓包,分析请求和返回 开始写代码爬取 /*** @Desc: 简单爬取boss ...

最新文章

  1. iptables配置-Linux系统安全防火墙
  2. oracle DBA 常用表和视图
  3. Linux内核如何装载和启动一个可执行程序
  4. [YTU]_2018 ( 约瑟夫问题)
  5. OrCAD分裂元件的使用方法
  6. AI人才缺口达百万:做了AI,就一定能拿到高薪offer吗?
  7. python从tushare获取数据_python调用tushare获取股票月线数据
  8. Google IO 2017为我们带来了什么
  9. python中int的用法归类
  10. python画简单图-使用Python中的Turtle库绘制简单的图形
  11. HTTP协议学习,post于get;用Fiddler测试请求
  12. 油猴安装错误问题(下载中断问题)及脚本安装
  13. 企业如何避免创新者的窘境
  14. pytorch转onnx报错的可能原因traced region did not have observable data dependence
  15. matlab ga函数详解,求对ga函数的详细解释
  16. Swin-Unet跑自己的数据集(Transformer用于语义分割)
  17. speedoffice(Word)如何给文字添加下划线
  18. 如何查看IE浏览器版本?在线检测IE版本号
  19. 七、使用OpenCV徒手实现:RGB转HSI,并提取红色
  20. C#读写二进制存档文件,可以修改部分单机游戏存档

热门文章

  1. mysqlOracle导入导出txt格式的数据
  2. JSAAS开源社区版
  3. 主成分分析旋转矩阵MATLAB实现,R语言高维数据的主成分pca、t-SNE算法降维与可视化分析案例报告...
  4. html guids标签,Windows下编译kaldi--kaldi(二)
  5. 搜索引擎网站收录提交入口
  6. 关于百度AI 图像识别 人体识别 调用API的简单实践
  7. 盛夏之梦A Dream of Summer 汉化发布[PC+PSP版]
  8. usb外接耳机声音过大解决方法
  9. Ubuntu 群组管理
  10. 铁匠smith_铁匠的大气散射