本文您将学到的东西包括:

scrapy爬虫的设置

  • requests(一个用来发送HTTP请求的简单库)
  • BeautifulSoup(一个从HTML和XML中解析数据的库)

MongoDB的用法

  • MongoBooster可视化工具
    注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮答疑容易放弃。为此小编建了个Python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python教程项目可拿,,一起相互监督共同进步!

Pyecharts可视化工具

re正则表达式库

  • 贪婪模式
  • 懒惰模式

系列文章
python爬虫实战(1) -- 抓取boss直聘招聘信息
python爬虫实战(2) -- MongoDB和数据清洗
python爬虫实战(3) -- 数据可视化

实验内容:使用pyecharts将之前爬取的数据通过图形化显示出来

参考:https://segmentfault.com/a/1190000012429530

其实这次没得参考啦,因为原作者没写过程,直接把最后的图表丢出来了T_T
我先自己研究一下吧~

01 pyecharts初体验

请教大牛后得知,想要实现这种效果,需要使用pyecharts

花式图表

于是我使用pip install pyecharts
过程略坎坷,遇到几次报错,不太明白,智能重复上述命令,结果两三次之后,安上了。
跑个代码实验一下

import pyechartsbar = pyecharts.Bar(title="myBar",subtitle="xxx data")attr =['a','b','c','d','e','f']v1 = [1,2,3,4,5,6]v2 = [3,5,2,1,5,1]bar.add('test1',attr,v1,is_stack=True)bar.add('test2',attr,v2,is_stack=True)bar.render()

一实验发现,能生成html文件,good

fun.render()命令可以生成html文件

但是Jupyter notebook生成的都是空白!类似下面这样:

Jupyter notebook下无法使用pycharts

这样可不方便呀,于是百度了很多办法,终于找到pyecharts的开发者回复的一种解决方案:

安装之前先执行一次 pip uninstall pyecharts
卸载原有版本后再 pip install pyecharts==0.1.9.5

试验后,发现这个办法可行,现在Jupyter notebook可以显示啦~

Jupyter notebook下使用pyecharts

附上2个参考
1.惊艳的可视化--飞机航行图 http://python.tedu.cn/know/320402.html
2.pyecharts官方文档(图表配置极其强大,什么都有,词云、热力图、等等) https://pyecharts.readthedocs.io/zh/latest/zh-cn/jupyter_notebook/
http://pyecharts.org/#/zh-cn/jupyter_notebook?id=%E7%A4%BA%E4%BE%8B

02 提取数据并绘制饼图

先绘制一个工作经验分布饼图
代码如下

experience = ["应届生","1年以内","1-3年","3-5年","5-10年","10年以","不限"]
value = []
for i in range(len(experience)):value.append(db.Python_jobs.count_documents({"experience": experience[i]}))
print(value)import pyecharts
chart_experience = pyecharts.Pie("工作经验扇形图")
chart_experience.add('test1',experience,value,is_label_show = True)
chart_experience

效果如下

工作经验饼图

  • 主要难点
    在于mongodb提取数据的数据库命令
    以及list循环
  • 命令小记
    len(list) 获取list元素个数
    list.append() 向list中添加新元素
    db.collection.count_documents('name':'value') 获取表中某变量的个数

03 用柱状图显示薪资

实现思路:
1 从数据库中取出所有应届生最低工资,累加,除以应届生数量,得到应届生最低薪资水平均值,放入salary_low
2 以此类推,循环取出其他工作经验的最低薪资平均值,放入salary_low中
3 以此类推,得到salary_high,与salary_low计算得到salary_avg
4 通过pyecharts显示出来
5 其中的数据结构就是list,exp是list,每个工作经验包含salary_low/avg/high

代码:

#04 薪资分布柱状图
from pyecharts import Bar
exp = ["应届生","1年以内","1-3年","3-5年","5-10年","10年以上","不限"]
salary_low = []
salary_high = []
salary_avg = []i = 0
for i in range(len(exp)):items = db.Python_jobs.find({'experience':exp[i]})low_sum = 0high_sum = 0for item in items:dictionnary = item['salary']#print(dictionnary)low_sum = dictionnary['low'] + low_sumhigh_sum = dictionnary['high'] + high_sumtry:salary_low.append(round(low_sum/value[i])) salary_high.append(round(high_sum/value[i])) salary_avg.append(round((salary_low[i]+salary_high[i])/2))except:salary_low.append(round(value[i])) salary_high.append(round(value[i]))salary_avg.append(round(value[i]))#print(salary_low)
#print(salary_high)
#print(salary_avg)bar = Bar("Python工程师薪资")
bar.add("最低薪资", exp, salary_low, is_label_show = True)
bar.add("平均薪资", exp, salary_avg, is_label_show = True)
bar.add("最高薪资", exp, salary_high, is_label_show = True)
bar

实现效果:

pyecharts柱状图

04 用扇形图显示领域

思路
数据总量 540条招聘信息
一、分几类(industryField相同算一类)
二、每一类多少条招聘信息

找了很久,终于找到mongodb中的Mapreduce方法可以用来实现

db.Python_jobs.mapReduce( function() { emit(this.industryField,1); }, function(key, values) {return Array.sum(values)}, {  out:"non" }
)

(执行完上面这条命令,其实把数据存入了另一个collection “non”中
显示的结果和上面的代码+find()一样)

在mongobooster查询结果如下

分类和每一类的条数都有了

对Mapreduce()函数的说明

map: function() {emit(this.cat_id,this.goods_number); }, # 函数内部要调用内置的emit函数,cat_id代表根据cat_id来进行分组,goods_number代表把文档中的goods_number字段映射到cat_id分组上的数据,其中this是指向向前的文档的,这里的第二个参数可以是一个对象,如果是一个对象的话,也是作为数组的元素压进数组里面;reduce: function(cat_id,all_goods_number) {return Array.sum(all_goods_number)}, # cat_id代表着cat_id当前的这一组,all_goods_number代表当前这一组的goods_number集合,这部分返回的就是结果中的value值;out: <output>, # 输出到某一个集合中,注意本属性来还支持如果输出的集合如果已经存在了,那是替换,合并还是继续reduce? 另外还支持输出到其他db的分片中,具体用到时查阅文档,筛选出现的键名分别是_id和value;query: <document>, # 一个查询表达式,是先查询出来,再进行mapReduce的sort: <document>, # 发往map函数前先给文档排序limit: <number>, # 发往map函数的文档数量上限,该参数貌似不能用在分片模式下的mapreducefinalize: function(key, reducedValue) {return modifiedObject; }, # 从reduce函数中接受的参数key与reducedValue,并且可以访问scope中设定的变量scope: <document>, # 指定一个全局变量,能应用于finalize和reduce函数jsMode: <boolean>, # 布尔值,是否减少执行过程中BSON和JS的转换,默认true,true时BSON-->js-->map-->reduce-->BSON,false时 BSON-->JS-->map-->BSON-->JS-->reduce-->BSON,可处理非常大的mapreduce。

pyecharts处理结果如下

空心饼图

代码如下:

#04.1 数据处理
industryFieldKey = []
industryFieldValue = []
cursor = db.non.find() #这个non就是之前db指令生成的新collection
for c in cursor: #如果不用cursor的话,只能看到16进制的游标值#print(c)industryFieldKey.append(c['_id'])industryFieldValue.append(c['value'])
print(industryFieldKey)
print(industryFieldValue)#04.2 可视化
from pyecharts import Pie
pie = Pie("各领域招聘数量", title_pos='center', width = 1000)
pie.add("", industryFieldKey, industryFieldValue, center=[60, 50], radius=[30, 70], label_text_color=None,is_label_show=True, legend_orient='vertical',legend_pos='left')
pie

欠缺之处 使用Mapreduce处理的时候没有排序输出,所以图像显示比较乱
后面有时间再完善吧~

学到的内容:

  • Mapreduce 可以统计分组以及各分组数量
  • mongodb collection中的内容,需要通过curser循环打印出来

05 用词云显示技术名词

思路
1 逐个打开页面
2 爬取label,放入MongoDB中
3 Mapreduce,排序

小发现
之前经常遇到jupyter notebook停止输出的问题
今天受不了了,google一下发现原来是这样:
[ * ]表示正在执行
编程[ * ]之后不要再重复敲了,否则就会停止输出
如果不小心敲了,那就点击上方栏目上的方块,停止运行,就好了。

[ * ]表示正在运行

1.逐个打开页面,print(label)完成 (更新于0801)

tags = soup.find("div", {"class": "job-tags"})print(tags.text)

效果如下

一排网页链接,一排label

2.将tags的内容保存到MongoDB中去
问题:取出来的值连在一起,而且存入数据库时前后都有\n
目前方法:

tags = soup.find("div", {"class": "job-tags"})print(tags.text)item['positionLables'] = tags.text

数据库存储效果:

前后带\n且没有分割

研究内容:
如何使用soup.find将网页中<span>Python</span><span>Hadoop</span>以list形式存入数据库?

3.使用第二层soup.find,提取list

tags = soup.find("div", {"class": "job-tags"})lists = tags.find_all("span")print(lists)

效果如下

[<span>python爬虫</span>, <span>Web前端</span>, <span>Diango</span>]

能够提取list了,只是还有<span>需要去掉

更新 2018-08-04

从这个列表中提取字符真是搞死我了,这个列表不是普通的列表,里面不是字符串
列表类型是 <class 'bs4.element.ResultSet'>
里面的字符类型是 <class 'bs4.element.Tag'>
所以今天用正则去匹配的时候总是出问题!

如何把 taglists = [<span>python爬虫</span>, <span>Web前端</span>, <span>Diango</span>]
变成 taglists = ["python爬虫", "Web前端", "Diango"]
成立难倒我的课题

没关系,今天学到了正则表达式,也是蛮好的

import re
key = r"<span>python爬虫</span>"#这段是你要匹配的文本
p1 = r"(?<=<span>).+?(?=</span>)"#这是我们写的正则表达式规则,你现在可以不理解啥意思
pattern1 = re.compile(p1)#我们在编译这段正则表达式
matcher1 = re.search(pattern1,key)#在源文本中搜索符合正则表达式的部分
print matcher1.group(0)#打印出来

输出结果

python爬虫

科普两个点

  • 第一点是?<=与?=
    ?<=<span> 表示在匹配字符前必须有<span>, ?=</span>表示在匹配字符后必须有</span>
    比如 p = r"(?<=A)XX(?=B)"
    表示要匹配的字符是XX
    但是必须满足AXXB的形式
  • 第二点是+? 贪婪模式和懒惰模式
    yiping@hit.edu.cn
    p1 = r"@.+." #想匹配@到"."之间,即hit
    结果是"@hit.edu."
    为什么多了? 因为正则表达式默认是贪婪模式
    yiping@hit.edu.cn
    p1 = r"@.+?." #在+之后加上?
    结果是"@hit."
    +?将贪婪模式改成了懒惰模式

放一个正则表达式讲的特别好的例子
https://www.cnblogs.com/chuxiuhong/p/5885073.html Python 正则表达式入门(初级篇)
有一本讲正则表达式的书挺不错的 《正则表达式必知必会》

更新 2018-08-09

做出了一周的努力,仍然没有办法使用soup find()方法提取岗位label,拖延已久,暂时告一段落吧。

这个项目目前只留下一个词云没有做完,其余内容都过了一遍。

学到的东西包括:
scrapy爬虫的设置

  • requests(一个用来发送HTTP请求的简单库)
  • BeautifulSoup(一个从HTML和XML中解析数据的库)

MongoDB的用法

  • MongoBooster可视化工具

Pyecharts可视化工具

re正则表达式库

  • 贪婪模式
  • 懒惰模式

总结注意:很多人学Python过程中会遇到各种烦恼问题,没有人帮答疑容易放弃。为此小编建了个Python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有最新Python教程项目可拿,,一起相互监督共同进步!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

Python爬虫实战-数据可视化相关推荐

  1. python爬虫工资-Python爬虫实战-数据可视化

    本文您将学到的东西包括: scrapy爬虫的设置 requests(一个用来发送HTTP请求的简单库) BeautifulSoup(一个从HTML和XML中解析数据的库) MongoDB的用法 Mon ...

  2. python爬虫程序员工资-Python爬虫实战-数据可视化

    本文您将学到的东西包括: scrapy爬虫的设置 requests(一个用来发送HTTP请求的简单库) BeautifulSoup(一个从HTML和XML中解析数据的库) MongoDB的用法 Mon ...

  3. 为什么要学习Python爬虫与数据可视化?

    提到Python爬虫与数据可视化,我们都不陌生.因为我们早已身在大数据驱动的时代,数据分析已然成为了一项必备技能.可能有人会问,为什么要学习Python爬虫与数据可视化? 答案是显而易见的,无论是出于 ...

  4. python 爬虫及数据可视化展示

    python 爬虫及数据可视化展示 学了有关python爬虫及数据可视化的知识,想着做一些总结,加强自己的学习成果,也能给各位小伙伴一些小小的启发. 1.做任何事情都要明确自己的目的,想要做什么,打算 ...

  5. Python爬虫以及数据可视化分析

    Python爬虫以及数据可视化分析之Bilibili动漫排行榜信息爬取分析 简书地址:https://www.jianshu.com/u/40ac87350697 简单几步,通过Python对B站番剧 ...

  6. Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)

    Python爬虫+数据分析+数据可视化(分析<雪中悍刀行>弹幕) 哔哔一下 爬虫部分 代码部分 效果展示 数据可视化 代码展示 效果展示 视频讲解 福利环节 哔哔一下 雪中悍刀行兄弟们都看 ...

  7. python 爬虫与数据可视化

    python 爬虫与数据可视化 1.引言 Web已经成为日新月异迅速发展的网络信息技术中的信息载体,如何有效地提取和利用搜索引擎获得互联网最有用的.可以免费公开访问的数据集,查找用户所需的价值数据或者 ...

  8. 2021-09-01 学习笔记:Python爬虫、数据可视化

    2021-09-01 学习笔记:Python爬虫.数据可视化 结于2021-09-07: 内容来自 成都工业大学 数字媒体专业实训: 主要内容: PyCharm开发Python脚本的基础配置: Pyt ...

  9. python爬虫及数据可视化分析

    python爬虫及数据可视化分析 1.前言 2.数据爬取 2.1定位到爬取数据 2.2爬虫实现方法 3.数据可视化分析 3.1将短文学网的各类文章做一个统计 3.2对某一类文章进行分析 1.前言 本篇 ...

最新文章

  1. 使用reflector对.NET反编译
  2. RHEL7: unbound(DNS server)的简单配置
  3. 字体渲染 mac linux,Mac下通过命令来渲染字体
  4. QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)
  5. 深入理解javascript原型和闭包(10)——this
  6. Centos6.4下安装mysql5.6.10
  7. Spring的Annotation使用注意
  8. 广场舞江湖刀光剑影,糖豆APP武艺高强却难打赢中老年擂台?
  9. Tera Term 下载教程
  10. ubuntu命令行一键安装谷歌浏览器
  11. 电瓶车换电柜的静电浪涌设计考虑
  12. base64和jpg/png互转
  13. Ceisum 计算向量夹角及垂足
  14. 轻松搞定应用启动黑白屏
  15. 我看朴灵评注阮一峰的《JavaScript 运行机制详解:再谈Event Loop》
  16. HDFS开启HA后,Hbase的REGIONSERVERS启动错误(Operation category READ is not supported in state standby)
  17. 0起步的摄影初学笔记
  18. IntelliJ IDEA调整字体大小
  19. kubernetes使用flannel网络插件服务状态显示CrashLoopBackOff
  20. js函数(function)

热门文章

  1. 助眠好物排行榜,有了这些就不怕睡不着了
  2. c#基于TCP/IP、CIP协议的欧姆龙PLC通信
  3. 常见iOS系统错误代码含义 英文版
  4. OpenGauss安装
  5. wireshark 学习更进一步 之RST数据解读
  6. phppage类封装分页功能_php封装的page分页类完整实例代码
  7. 阿克曼小车urdf模型搭建与gazebo仿真
  8. ArcGis系列-java发布GP分析结果(带样式)
  9. 揭秘淘宝倒卖QQ产业,他们上万QQ号都是哪来的?
  10. 结合Flex Builder和Flash CS4制作一个中国地图的应用