要看一种技术在本地的流行程度,最简单的就是找招聘网站按关键词搜索。

比如今天查到的职位数量是vue 1296个,react 1204个,angular 721个。国际上比较流行的是react,本地市场中vue倒更受欢迎。所以学习的话可以先考虑前两个。

比如我们可以功利化一点:某些语言的薪资中值比较低,或者某些语言职位数比较少,那么我们做做比较,去学点别的吗。


分为两步,第一步爬取并保存成文本文件;第二步读取和解析文本文件显示折线图。(数据存在本地更好,免得频繁扒着玩,对方网站恨我。所以分为两步)

第一个文件:

按关键词,扒取页面 https://sou.zhaopin.com/jobs/searchresult.ashx?jl=北京

按薪资区间分为几挡:1~6000,  6001~12000,  12001~20000,  20001~30000,  30001~99999

# -*- coding: utf-8 -*-
# coding=utf-8 import requests
import bs4
import urllib def getPageTxt(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
r = requests.get(url, headers=headers)
soup = bs4.BeautifulSoup(r.content.decode("utf-8"), "lxml")
mylist = soup.select('.search_yx_tj em')
counts = mylist[0].text
return counts def getUrl(word, moneymin=0, moneymax=99999):
url = "http://sou.zhaopin.com/jobs/searchresult.ashx?jl=北京&kw="
url += word + "&p=1&isadv=0&isfilter=1&sf=" + str(moneymin) + "&st=" + str(moneymax)
return url # 一、查询关键词
word000 = "前端,python" #限最多6个值,中间半角逗号分隔
#word000 = "前端,python,php"
words = word000.split(",") # 二、工资区间(最小值为0,最大值为99999)
moneys = [0, 6000, 12000, 20000, 30000, 99999]
money_min = list(map(lambda x: x+1, moneys[:-1])) #[1, 6001, 12001, 20001, 30001]
money_max = list(map(lambda x: x, moneys[1:])) #[6000, 12000, 20000, 30000, 99999]
print(money_min)
print(money_max) # 三、url拼串,扒取页面,生成字典文件
'''
字典文件的结构为:(counts是职位数量,startmoney是起薪。这两个list,后面将用于生成折线图)
[
{'key': '前端', 'counts': [1105, 4485, 4394, 1549, 393], 'startmoney': [1, 6001, 12001, 20001, 30001]},
{'key': 'python', 'counts': [700, 2945, 4467, 2454, 984], 'startmoney': [1, 6001, 12001, 20001, 30001]}
] '''
ulist = []
for word in words:
li = {}
counts = []
for k in money_min:
idx = money_min.index(k) # 索引
url = getUrl(word, money_min[idx], money_max[idx]) # 拼串
counts.append(int(getPageTxt(url))) # 扒取 ,并转换为数字,存入counts列表
li["key"] = word
li["counts"] = counts
li["startmoney"] = money_min
ulist.append(li)
print(ulist)
f = open("counts000.txt", "w")
f.write(str(ulist))
f.close()

第二个文件:

注意这里有个坑:json载入的字符串,必须是双引号

# -*- coding: utf-8 -*-
# coding=utf-8 import json
f = open('counts000.txt', 'r+')
ulliststring = f.read()
f.close() ulliststring = ulliststring.replace("'", '"') # 注意这里有个坑!! json的标准格式:要求必须 只能使用双引号作为键 或者 值的边界符号,不能使用单引号,而且“键”必须使用边界符(双引号)
ullist = json.loads(ulliststring) import matplotlib
import matplotlib.pyplot as plt
matplotlib.rcParams['font.sans-serif'] = ['SimHei']# 为了能显示中文(而不是显示一个框)
matplotlib.rcParams['font.family']='sans-serif'
matplotlib.rcParams['axes.unicode_minus'] = False # 为了能显示负号(而不是显示一个框) colornames = ['#ff0000', '#ccee00', '#00aa00','#0000ff', '#9900ff', '#ff0099'] plt.title('bj薪资、职位数量折线表', color='#ff33a0')
plt.xlabel('薪资区间') # 设置X坐标轴标题
plt.ylabel('职位数量') # 设置Y坐标轴表
plt.xlim(0, 35000) # 设置坐标轴的范围
plt.ylim(0, 5000)
# plt.xticks([2,4])#设置x轴的标签间隔
# plt.yticks([4,16])#设置y轴的标签间隔 i = 0
for li in ullist:
x = li["startmoney"]
y = li["counts"]
plt.plot(x, y, colornames[i])
i += 1
plt.show()

写在后面:

可能会有些小bug,不做处理了:

比如colornames颜色我只设了6个,y轴最大值才设了5000,

折线图的x轴,代表的是起薪点。理想的应该是薪资区间的中值。

..

练习: bs4 简单爬取 + matplotlib 折线图显示 (关键词,职位数量、起薪)的更多相关文章

  1. 用BeautifulSoup简单爬取BOSS直聘网岗位

    用BeautifulSoup简单爬取BOSS直聘网岗位 爬取python招聘 import requests from bs4 import BeautifulSoup def fun(path): ...

  2. java爬虫-简单爬取网页图片

    刚刚接触到“爬虫”这个词的时候是在大一,那时候什么都不明白,但知道了百度.谷歌他们的搜索引擎就是个爬虫. 现在大二.再次燃起对爬虫的热爱,查阅资料,知道常用java.python语言编程,这次我选择了 ...

  3. Golang+chromedp+goquery 简单爬取动态数据

    目录 Golang+chromedp+goquery 简单爬取动态数据 Golang的安装 下载golang软件 解压golang 配置golang 重新导入配置 chromedp框架的使用 实际的代 ...

  4. Python简单爬取Amazon图片-其他网站相应修改链接和正则

    简单爬取Amazon图片信息 这是一个简单的模板,如果需要爬取其他网站图片信息,更改URL和正则表达式即可 1 import requests 2 import re 3 import os 4 de ...

  5. 一、python简单爬取静态网页

    一.简单爬虫框架 简单爬虫框架由四个部分组成:URL管理器.网页下载器.网页解析器.调度器,还有应用这一部分,应用主要是NLP配合相关业务. 它的基本逻辑是这样的:给定一个要访问的URL,获取这个ht ...

  6. 用python爬虫简单爬取 笔趣网:类“起点网”的小说

    首先:文章用到的解析库介绍 BeautifulSoup: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能. 它是一个工具箱,通过解析文档为用户提供 ...

  7. python之简单爬取一个网站信息

    requests库是一个简介且简单的处理HTTP请求的第三方库 get()是获取网页最常用的方式,其基本使用方式如下 使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML ...

  8. 网DAI之家简单爬取

    用requests和bs做个简单的爬取网DAI之家的例子. 只做笔记用. #!/usr/bin/python3 import requestsfrom bs4 import BeautifulSoup ...

  9. python网络爬虫--简单爬取糗事百科

    刚开始学习python爬虫,写了一个简单python程序爬取糗事百科. 具体步骤是这样的:首先查看糗事百科的url:http://www.qiushibaike.com/8hr/page/2/?s=4 ...

随机推荐

  1. python rabbitMQ持久化队列消息

    import pika connection = pika.BlockingConnection( pika.ConnectionParameters('localhost'))#建立一个最基本的so ...

  2. HOMEWORK1

    回顾你过去将近3年的学习经历 当初你报考的时候是真正喜欢计算机这个专业吗? 当初报考的时候是选择英语和计算机专业,报英语那个学校没去上,就来学了计算机,对计算机专业的感觉介于喜欢和热爱之间,就是说还是 ...

  3. javascript 4.1 美术馆

    1.把images文件夹放在html文件同一文件夹子目录下,可以在html中引用图片 例如<a href="images/rose.jpg" title="A re ...

  4. 8. Security-oriented operating systems (面向安全的操作系统 5个)

    这款出色的可启动live CD的Linux发行版来自于Whax和Auditor的合并. 它拥有各种各样的安全和取证工具,并提供丰富的开发环境. 强调用户模块化,所以用户可以轻松地定制以包括个人脚本,附 ...

  5. STM32 BOR/POR/PDR介绍

    以STM32为例,介绍单片机中的BOR/POR/PDR1)PVD = Programmable Votage Detector 可编程电压监测器 它的作用是监视供电电压,在供电电压下降到给定的阀值以下 ...

  6. c#实现识别图片上的验证码数字

    这篇文章主要介绍了c#实现识别图片上的验证码数字的方法,本文给大家汇总了2种方法,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  7. c# 中 利用 CookieContainer 对 Cookie 进行序列化和反序列化校验

    private void Form1_Load(object sender, EventArgs e) { var cookieStr = @".CNBlogsCookie=1BE76122 ...

  8. 1、Nexus安装

    1.nexus 下载地址: https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.5-02-bundle.tar.g ...

  9. C语言堆栈入门——堆和栈的区别(转)

    一.预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1.栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等.其    操 ...

  10. 利用Clang(Python接口)来解析C++

    1 背景说明 最近希望利用开源库来解析C++头文件,并做一些自动翻译.自动注释之类的工作.经过两天的调研,发现clang最有希望满足需求.clang提供了三套接口来共外部使用,liblang最适合作为 ...