深感抱歉

本来这篇文章应该是在昨天发的,可是电脑出了问题蓝屏了。晚上回来重装了系统,结果还是搞到了现在。

今天想和大家聊聊Python与爬虫

python之所以能迅速风靡全国,和大街小巷各种的培训机构脱不开关系。
一会pythonAI未来以来,一会儿4个月培养人工智能与机器学习顶尖人才,更有甚者什么一周成就爬虫分析师…
我这一把年纪了,胆子小只敢在自己的公众号里说说。至于出去了,你们该实力互吹、生猛造势的,我看看就好不说话。
网上经常看到爬虫的文章,什么爬了几十万数据,一把撸下来几千万评论的,听起来高大上又牛逼。
但其实爬虫工程师,你看网上有几个招聘的?为什么,因为数据有价!
各大厂做什么网络解决方案的,怎么解决?不得先把各大运营商数据买回来分析了才去解决吗?天下哪有白吃的午餐。

爬虫面临的问题
  1. 不再是单纯的数据一把抓
    多数的网站还是请求来了,一把将所有数据塞进去返回,但现在更多的网站使用数据的异步加载,爬虫不再像之前那么方便
    很多人说js异步加载与数据解析,爬虫可以做到啊,恩是的,无非增加些工作量,那是你没遇到牛逼的前端,多数的解决办法只能靠渲染浏览器抓取,效率低下,接着往下走

  2. 千姿百态的登陆验证
    从12306的说说下面哪个糖是奶糖,到现在各大网站的滑动拼图、汉子点击解锁,这些操作都是在为了阻止爬虫的自动化运行。
    你说可以先登录了复制cookie,但cookie也有失效期吧?

  3. 反爬虫机制
    何为反爬虫?犀利的解释网上到处搜,简单的逻辑我讲给你听。你几秒钟访问了我的网站一千次,不好意思,我把你的ip禁掉,一段时间你别来了。
    很多人又说了,你也太菜了吧,不知道有爬虫ip代理池的开源项目**IPProxys**吗?那我就呵呵了,几个人真的现在用过免费的ip代理池,你去看看现在的免费代理池,有几个是可用的!
    再说了,你通过IPProxys代理池,获取到可用的代理访问人家网站,人家网站不会用同样的办法查到可用的代理先一步封掉吗?然后你只能花钱去买付费的代理

  4. 数据源头封锁
    平时大家看的什么爬爬豆瓣电影网站啊,收集下某宝评论啊…这些都是公开数据。但现在更多的数据逐步走向闭源化。数据的价值越来越大,没有数据获取的源头,爬虫面临什么问题?

个人面对爬虫的态度

学习爬虫,可以让你多掌握一门技术,但个人劝你不要在这条路走的太深。没事儿爬点小东西,学习下网络知识,掌握些网页解析技巧就好了。再牛逼的爬虫框架,也解决不了你没数据的苦恼。

说说今天内容

扯了一圈了,该回到主题了。
上面说了一堆的爬虫这不好那不好,结果我今天发的文章确是爬虫的,自己打自己的脸?
其实我只是想说说网站数据展示与分析的技巧…恰巧Boss直聘就做的很不错。怎么不错?一点点分析…

  • 数据共享
    先来看一张图:

    我选择黑龙江省的大兴安岭,去看看那里有招聘python的没,多数系统查询不到数据就会给你提示未获取到相关数据,但Boss直聘会悄悄地吧黑龙江省的python招聘信息给你显示处理,够鸡~贼。
  • 数据限制
    大兴安岭没有搞python的,那我们去全国看看吧:

    这里差一点就把我坑了,我开始天真的以为,全国只有300条(一页30条,共10也)python招聘信息。
    然后我回过头去看西安的,也只有10页,然后想着修改下他的get请求parameters,没卵用。
    这有啥用?仔细想…一方面可以做到放置咱们爬虫一下获取所有的数据,但这只是你自作多情,这东西是商机!
    每天那么多的商家发布招聘信息,进入不了top100,别人想看都看不到你的消息,除非搜索名字。那么如何排名靠前?答案就是最后俩字,靠钱。你是Boss直聘的会员,你发布的就会靠前…
  • 偷换概念
    依旧先看图:

    我搜索的是ruby,你资料不够,其他来凑…
  • ip解析
    老套路,再来看一张图:

感觉人生已经到达了高潮,感觉人生已经到达了巅峰

Boss直聘的服务器里,留着我的痕迹,多么骄傲的事情啊。你们想不想和我一样?只需要3秒钟…
三秒钟内你的访问量能超过1000,妥妥被封!

  • 反反反爬虫
    咱们正常的叫爬虫,它不让我们爬,这叫反爬虫,然后我们用ip代理池的ip,这叫反反爬虫。结果你发现,人家早就把可用的代理池先一步封了,这叫反反反爬虫…
    免费代理池中,很多代理是不可用或者需要输入密码的。好不容易找到一些能用的列表,拉过来添加上发现早就被封掉了,也许是它提前禁掉,也许是别人用过被封了,但结局就是你千辛万苦找来的,往往最终还是失败的。
那么我们该怎么办
  1. 设置不同的User-Agent
    使用pip install fake-useragent安装后获取多种User-Agent,但其实本地保存上几十个,完全够了…
  2. 不要太夯(大力)
    适当的减慢你的速度,别人不会觉得是你菜…别觉得一秒爬几千比一秒爬几百的人牛逼(快枪手子弹打完的早…不算开车吧?)。
  3. 购买付费的代理
    为什么我跳过了说免费的代理?因为现在搞爬虫的人太多了,免费的基本早就列入各大网站的黑名单了。
说书今天的内容

爬取全国热点城市的职业,然后对各大城市的薪资进行比较。
原始数据如下:

先来看看python的薪酬榜:

看一下西安的排位,薪资平均真的好低…
至于你说薪资范围:什么15-20K?放心90%的人入职都只会给你15K的,那10%的人不是你,不是你。
再来看看ruby的:

看这感觉比Python高很多啊…但其实呢?跟百度人均公司3W+一样,你拿人均算?光几个总裁年薪上亿的,就拉上去了…
但还是可以看到一点,西安的薪酬还是好低…

代码

代码其实没有太多讲的,篇幅最多的内容,估计就是我的User-Agent了…

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/6/14 22:23
# @Software : PyCharm
# @version  :Python 3.6.8
# @File     : BossCrawler.pyimport requests
from bs4 import BeautifulSoup
import csv
import random
import time
import argparse
from pyecharts.charts import Line
import pandas as pdclass BossCrawler:def __init__(self, query):self.query = queryself.filename = 'boss_info_%s.csv' % self.queryself.city_code_list = self.get_city()self.boss_info_list = []self.csv_header = ["city", "profession", "salary", "company"]@staticmethoddef getheaders():user_list = ["Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16","Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14","Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14","Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02","Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00","Opera/9.80 (Windows NT 5.1; U; zh-sg) Presto/2.9.181 Version/12.00","Opera/12.0(Windows NT 5.2;U;en)Presto/22.9.168 Version/12.00","Opera/12.0(Windows NT 5.1;U;en)Presto/22.9.168 Version/12.00","Mozilla/5.0 (Windows NT 5.1) Gecko/20100101 Firefox/14.0 Opera/12.0","Opera/9.80 (Windows NT 6.1; WOW64; U; pt) Presto/2.10.229 Version/11.62","Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.10.229 Version/11.62","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52","Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; de) Presto/2.9.168 Version/11.52","Opera/9.80 (Windows NT 5.1; U; en) Presto/2.9.168 Version/11.51","Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; de) Opera 11.51","Opera/9.80 (X11; Linux x86_64; U; fr) Presto/2.9.168 Version/11.50","Opera/9.80 (X11; Linux i686; U; hu) Presto/2.9.168 Version/11.50","Opera/9.80 (X11; Linux i686; U; ru) Presto/2.8.131 Version/11.11","Opera/9.80 (X11; Linux i686; U; es-ES) Presto/2.8.131 Version/11.11","Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/5.0 Opera 11.11","Opera/9.80 (X11; Linux x86_64; U; bg) Presto/2.8.131 Version/11.10","Opera/9.80 (Windows NT 6.0; U; en) Presto/2.8.99 Version/11.10","Opera/9.80 (Windows NT 5.1; U; zh-tw) Presto/2.8.131 Version/11.10","Opera/9.80 (Windows NT 6.1; Opera Tablet/15165; U; en) Presto/2.8.149 Version/11.1","Opera/9.80 (X11; Linux x86_64; U; Ubuntu/10.10 (maverick); pl) Presto/2.7.62 Version/11.01","Opera/9.80 (X11; Linux i686; U; ja) Presto/2.7.62 Version/11.01","Opera/9.80 (X11; Linux i686; U; fr) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 6.1; U; sv) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 6.1; U; en-US) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 6.1; U; cs) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 6.0; U; pl) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 5.1; U;) Presto/2.7.62 Version/11.01","Opera/9.80 (Windows NT 5.1; U; cs) Presto/2.7.62 Version/11.01","Mozilla/5.0 (Windows NT 6.1; U; nl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01","Mozilla/5.0 (Windows NT 6.1; U; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 Opera 11.01","Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; de) Opera 11.01","Opera/9.80 (X11; Linux x86_64; U; pl) Presto/2.7.62 Version/11.00","Opera/9.80 (X11; Linux i686; U; it) Presto/2.7.62 Version/11.00","Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.37 Version/11.00","Opera/9.80 (Windows NT 6.1; U; pl) Presto/2.7.62 Version/11.00","Opera/9.80 (Windows NT 6.1; U; ko) Presto/2.7.62 Version/11.00","Opera/9.80 (Windows NT 6.1; U; fi) Presto/2.7.62 Version/11.00","Opera/9.80 (Windows NT 6.1; U; en-GB) Presto/2.7.62 Version/11.00","Opera/9.80 (Windows NT 6.1 x64; U; en) Presto/2.7.62 Version/11.00","Opera/9.80 (Windows NT 6.0; U; en) Presto/2.7.39 Version/11.00"]user_agent = random.choice(user_list)headers = {'User-Agent': user_agent}return headersdef get_city(self):headers = self.getheaders()r = requests.get("http://www.zhipin.com/wapi/zpCommon/data/city.json", headers=headers)data = r.json()return [city['code'] for city in data['zpData']['hotCityList'][1:]]def get_response(self, url, params=None):headers = self.getheaders()r = requests.get(url, headers=headers, params=params)r.encoding = 'utf-8'soup = BeautifulSoup(r.text, "lxml")return soupdef get_url(self):for city_code in self.city_code_list:url = "https://www.zhipin.com/c%s/" % city_codeself.per_page_info(url)time.sleep(10)def per_page_info(self, url):for page_num in range(1, 11):params = {"query": self.query, "page": page_num}soup = self.get_response(url, params)lines = soup.find('div', class_='job-list').select('ul > li')if not lines:# 代表没有数据了,换下一个城市returnfor line in lines:info_primary = line.find('div', class_="info-primary")city = info_primary.find('p').text.split(' ')[0]job = info_primary.find('div', class_="job-title").text# 过滤答非所谓的招聘信息if self.query.lower() not in job.lower():continuesalary = info_primary.find('span', class_="red").text.split('-')[0].replace('K', '')company = line.find('div', class_="info-company").find('a').text.lower()result = dict(zip(self.csv_header, [city, job, salary, company]))print(result)self.boss_info_list.append(result)def write_result(self):with open(self.filename, "w+", encoding='utf-8', newline='') as f:f_csv = csv.DictWriter(f, self.csv_header)f_csv.writeheader()f_csv.writerows(self.boss_info_list)def read_csv(self):data = pd.read_csv(self.filename, sep=",", header=0)data.groupby('city').mean()['salary'].to_frame('salary').reset_index().sort_values('salary', ascending=False)result = data.groupby('city').apply(lambda x: x.mean()).round(1)['salary'].to_frame('salary').reset_index().sort_values('salary', ascending=False)print(result)charts_bar = (Line().set_global_opts(title_opts={"text": "全国%s薪酬榜" % self.query}).add_xaxis(result.city.values.tolist()).add_yaxis("salary", result.salary.values.tolist()))charts_bar.render('%s.html' % self.query)if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument("-k", "--keyword", help="请填写所需查询的关键字")args = parser.parse_args()if not args.keyword:print(parser.print_help())else:main = BossCrawler(args.keyword)main.get_url()main.write_result()main.read_csv()
结尾说两句
  1. 关于爬虫的问题,可能言语有些偏激,觉得那里说的不对的,大家可以在评论区讨论。
  2. 如果大家觉得这种个人言论过多的帖子不适合你们学习,也可以评论或者私信我,我以后少说点。
  3. ** 这点最重要,如果你们觉得我的文章还看得过去,每天更新还算辛苦,就帮忙把公众号推荐给你身边同样喜欢python的朋友**
  4. 其实这点对我有些重要,如果你看过觉得有收获,可以点击文章右下角的**“在看”**让我知道。
  5. 代码和数据和html,老规矩公众号回复boss,即可获取文章的数据、代码及pyecharts生成好的html文件…

今天的内容就到这里,如果觉得有帮助,记得点赞支持。欢迎大家关注我的公众号【清风Python】

Python爬取Boss直聘,获取全国Python薪酬榜相关推荐

  1. python爬取boss直聘招聘信息_Python 爬取boss直聘招聘信息!

    原标题:Python 爬取boss直聘招聘信息! 1.一些公共方法的准备 获取数据库链接: importpymysql ''' 遇到不懂的问题?Python学习交流群:821460695满足你的需求, ...

  2. python爬取boss直聘招聘信息_Python爬虫实战-抓取boss直聘招聘信息

    Python Python开发 Python语言 Python爬虫实战-抓取boss直聘招聘信息 实战内容:爬取boss直聘的岗位信息,存储在数据库,最后通过可视化展示出来 PS注意:很多人学Pyth ...

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

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

  4. python爬取boss直聘招聘信息_年底啦,利用Python爬取Boss直聘的招聘信息,为明年跳槽做准备...

    原标题:年底啦,利用Python爬取Boss直聘的招聘信息,为明年跳槽做准备 前言 为什么都说程序员的薪资高,但是刚开始入职的你,薪资并不是自己想象中的那样,首先是你的工作经验不足,其次就是需要不断的 ...

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

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

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

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

  7. python 爬取boss直聘招聘信息实现

    1.一些公共方法的准备 获取数据库链接: import pymysql ''' 遇到不懂的问题?Python学习交流群:1136201545满足你的需求,资料都已经上传群文件,可以自行下载! ''' ...

  8. python爬取boss直聘招聘信息_Python笔记-爬取Boss直聘的招聘信息

    2018-05-09笔记: 最近迷上了爬虫,爬取招聘信息,存在MongoDB上 代码思路和上一篇爬取酷狗TOP500差不多,但是在使用CSS选择器的时候,有两组信息是连在一起,所以使用正则来获取 本来 ...

  9. Python爬取Boss直聘,帮你获取全国各类职业薪酬榜

    今天想和大家聊聊Python与爬虫 python之所以能迅速风靡全国,和大街小巷各种的培训机构脱不开关系. 一会pythonAI未来以来,一会儿4个月培养人工智能与机器学习顶尖人才,更有甚者什么一周成 ...

最新文章

  1. 爬虫学习笔记(二十三)—— Appium+Mitmproxy
  2. 无监督特征学习——Unsupervised feature learning and deep learning
  3. laravel mysql增删改查_Laravel框架数据库操作的增删改三种方式 阿星小栈
  4. Node系列——Node第三方模块使用总结
  5. 恭迎万亿级营销(圈人)潇洒的迈入毫秒时代 - 万亿user_tags级实时推荐系统数据库设计...
  6. Python+OpenCV:摄像机标定(Camera Calibration)
  7. wls12C启用Gzip
  8. Windows 10 修复烦人 Bug:一个像素逼死强迫症
  9. 更改docker ip
  10. 取消全部呼叫转移代码_中国移动的卡取消呼叫转移的快捷方式是什么?
  11. 云服务器超级鸟,超级鸟的自述_A3_新浪游戏_新浪网
  12. 感受亮度与光强,及马赫带效应
  13. 小米MIUI手机adb连接教程
  14. AutoCAD .Net 创建直线Line
  15. 软件开发项目为什么要做第三方软件测试,软件测评机构怎么选择?
  16. Bing(必应)搜索,为什么用户越来越多?
  17. 如何获取目标基因的转录因子
  18. 【分屏】2秒钟实现 Windows窗口多分屏的进阶技巧
  19. OnlyOffice官方Demo必要的修改及参数解释
  20. 浏览器 弹广告 android,android手机 UC浏览器 时不时跳出广告 是不是中毒了

热门文章

  1. 如何方便有效的群发邮件,外贸公司群发邮件平台软件好用吗?
  2. Python-LBM(格子玻尔兹曼)程序源码实例分析—圆柱绕流篇
  3. Java基础——IO详解
  4. Transfer Learning for NLP with TensorFlow Hub
  5. 如何去除视频水印?分享两种去除视频水印的方法
  6. 《收获,不止Oracle》表的设计之五朵金花
  7. 【Python机器学习】决策树、逻辑回归、神经网络等模型对电信用户流失分类实战(附源码和数据集)
  8. 已解决EROR 1064 (42000): You have an error in. your SOL syntax. check the manual that corresponds to yo
  9. 知识图谱学习与实践(4)——通过例句介绍Sparql的使用
  10. vs2010不能正确加载 #39;VSTS for Database Professionals Sql Server Data-tier Application#39;包