大数据+爬取前程无忧校园招聘+flume+hive+mysql+数据可视化

  • 自己搭建的hadoop博客
  • 1.爬取前程无忧网页和校园招聘
    • 1.1用scrapy爬取前途无忧网站,我爬了10w多条数据,在存入MongoDB中.
    • 1.2.存入Mogodb中,设置管道和setting.
    • 1.3.从cmd里面mogodb/bin目录下导出数据
      • 1.3.1 导出命令
      • 1.3.2 对导出数据做清洗
  • 2.我对文件清洗过后变为txt文件.传入linux中
    • 2.1转换格式问题,我的数据从138MB变为了100MB.
    • 2.2通过flume向hdfs传输数据,创建qiangcheng.conf文件,写入flume传输代码.
    • 2.3遇到报错信息,由于日志信息过大.
    • 2.4解决方案:
    • 2.5可以看到我上传的文件.
      • 2.5.1 对上传的数据进行合并
      • 2.5.2对合并的文件修改文件名为qiangc.
      • 2.5.3 下载hdfs上的文件我们可以看到数据以制表符为分隔,我改成了以" ` "这个符号分隔.
    • 2.6 重新上传一遍以" ` "分隔符来对数据进行分隔. 在对hdfs文件进行改写.上传分隔好的数据.在传入flume中.
    • 2.7对数据进行清洗后.在hive中创建数据表.
  • 3.对hdfs中清洗的数据,创建表导入hdfs上的数据.
    • 3.2从hdfs导入数据到hive,导入数据成功.
  • 4.创建caiji表装自己想要的数据,来装取数据采集表
    • 4.1 可以看到我们获得的数据.
  • 5.把大数据工程师的数据插入到数据caiji当中.
    • 5.1导入大数据工程师数据成功
      • 5.1.2查看大数据工程师的数据.
  • 6.把数据分析的数据插入到数据表caiji当中.
    • 6.1插入数据分析成功
      • 6.1.2查看我们的采集表(有数据、大数据工程师、数据分析).
  • 7.现在对caiji表进行分析.
    • 7.1我们要对jobmoney的工资进行数据分析.
      • 7.1.1分析"数据分析","大数据开发工程师","数据采集"等岗位的平均工资、最高工资、最低工资,做条形图展示.
      • 7.1.2创建一个表用来计算所有数据的最大值、最小值、平均值.
      • 7.1.3通过查看所有数据,发现jobmoney数据有为null的数据,所以对jobmoney为null的数据不要.
      • 7.1.4 修改jobmoney为null的数据成功.
      • 7.1.5计算数据分析的工资.
      • 7.1.6由于数据少对数据进行模糊查询.
      • 7.1.7可以的三个数据的最高工资、最低工资、和平均工资.
      • 7.1.8我们创建三个表,来看个给地区的岗位数.
      • 7.1.9我们来看各个地区的岗位数.
      • 7.1.10 数据分析岗位数
      • 7.1.11 大数据分析师岗位数
      • 7.1.12 数据采集岗位数
  • 8.我们来看工作个几年工作经验计算工资.
    • 8.1 创建几年工资经验表(sannianggongzi).
    • 8.2 把数据重dashujujingyan插入到sannianggongzi表
      • 8.2.1 查看大数据岗位三年工资数据.
  • 9.分析大数据岗位需求,查看大数据走向,做折线图展示.
    • 9.1 创建数据表
    • 9.2 查看数据表的内容
  • 10.hive导入数据到HDFS
    • 10.1hive上传到hdfs![在这里插入图片描述](https://img-blog.csdnimg.cn/20200714223017403.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lzeV8xXzI=,size_16,color_FFFFFF,t_70)
  • 11.利用sqoop传入到mysql
    • 11.1连接我的本地mysql
    • 11.2创将数据表
    • 11.3利用sqoop上传到mysql上.
      • 11.3.1 sqoop导入mysql数据表
  • 12.数据可视化
    • 12.1 三年工资薪资图
    • 12.2 数据分析饼图岗位地区个数
    • 12.3 大数据岗位分析图
    • 12.4 数据采集
    • 12.5 大数据1-3年经验工资
    • 12.3 折线图
  • 13.总结

自己搭建的hadoop博客

我搭建了hadopp伪分布式和分布式,记录在我的博客中
伪分布式链接:https://blog.csdn.net/ysy_1_2/article/details/106615430
完全分布式链接:https://blog.csdn.net/ysy_1_2/article/details/106260140

1.爬取前程无忧网页和校园招聘

1.1用scrapy爬取前途无忧网站,我爬了10w多条数据,在存入MongoDB中.

# -*- coding: utf-8 -*-
import scrapyfrom qianchengwuyou.items import QianchengwuyouItemclass QiangchengSpider(scrapy.Spider):name = 'qiangcheng'allowed_domains = ['51job.com']start_urls = ["https://search.51job.com/list/000000,000000,0000,00,9,99,%2520,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare="]def parse(self, response):job_list = response.xpath("//div[@class='dw_table']//div[@class='el']/p[1]//span/a/@href").getall()for i_items in job_list:yield scrapy.Request(url=i_items,callback=self.jiexi_content,dont_filter=True)#获取下一页的hrefnext_pages = response.xpath("//div[@class='p_in']//li[last()]/a/@href").get()if next_pages:yield scrapy.Request(url=next_pages,callback=self.parse,dont_filter=True)def jiexi_content(self,response):item = QianchengwuyouItem()item['job_name'] = response.xpath("//div[@class='cn']/h1/text()").extract_first()try:item['job_money']  = response.xpath("//div[@class='cn']/strong/text()").extract_first()except:item['job_money'] = "面议"item['job_company'] = response.xpath("//div[@class='cn']//a[1]/text()").extract_first()#抓取所有工作地点和教育程度job_all = response.xpath("//div[@class='cn']//p[2]/text()").getall()#对抓取的列表进行分割取出,列表中包含了工作地点和工作经历和教育程度.try:item['job_place'] = job_all[0].strip()except:item['job_place'] = ""try:item['job_experience'] = job_all[1].strip()except:item['job_experience'] = '无要求'try:item['job_education'] = job_all[2].strip()except:item['job_education'] = '不要求'#对所有岗位职责和任务进行提取,都爬取了的,爬取的岗位职责和任职要求job_content = response.xpath("//div[@class='bmsg job_msg inbox']/p/text()").getall()job_nz = []#遍历循环取得岗位职责和任职要求的数据添加到job_nz[]中,在取出数据.for job_nzs in job_content:job_nz.append(job_nzs)try:item['job_nz'] = job_nzexcept:item['job_nz'] = "上岗安排"yield item

校园招聘

1.2.存入Mogodb中,设置管道和setting.

# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.htmlimport pymongo
from scrapy.utils.project import get_project_settings
settings = get_project_settings()class QianchengwuyouPipeline:def __init__(self):pass# 链接数据库client = pymongo.MongoClient(host=settings['MONGO_HOST'], port=settings['27017'])self.db = client[settings['MONGO_DB']]  # 获得数据库的句柄self.coll = self.db[settings['MONGO_COLL']]  # 获得collection的句柄#数据库登录需要账号密码的话#self.db.authenticate(settings['MONGO_USER'], settings['MONGO_PSW'])def process_item(self, item, spider):passpostItem = dict(item)  # 把item转化成字典形式self.coll.insert(postItem)  # 向数据库插入一条记录return item  # 会在控制台输出原item数据,可以选择不写def close(self):close.client.close()

setting中设置

1.3.从cmd里面mogodb/bin目录下导出数据

1.3.1 导出命令

 mongoexport -d dbname(你的数据库名) -c user(要导出的表) -f locations(要导出的字段) --type=csv -o D:\我导入的是当前目录(你要导入的目录).

其中,"d"是使用Mongo数据库,"c"指的是数据库集合(也就是数据库表),"f"指的是域(也就是要导出的数据字段),"0"指的是csv文件的输出路径.

1.3.2 对导出数据做清洗

导出csv文件,对文件作出清洗

2.我对文件清洗过后变为txt文件.传入linux中

在我的主机创建data文件夹,存入txt文件.

2.1转换格式问题,我的数据从138MB变为了100MB.

2.2通过flume向hdfs传输数据,创建qiangcheng.conf文件,写入flume传输代码.

flume命令:

./flume-ng agent -n a1 -c ../conf -f ../conf/qiangcheng.conf -Dflume.root.logger=INFO,console

2.3遇到报错信息,由于日志信息过大.

2.4解决方案:

在lfume下的conf/flume-env.sh下文件添加:

export JAVA_OPTS="-Xms512m -Xmx1024m -Dcom.sun.management.jmxremote"

2.5可以看到我上传的文件.

2.5.1 对上传的数据进行合并

hadoop fs -cat /qiangcheng/2020-07-13_21/* | hadoop fs -put - /qiangcheng/2020-07-13_21

2.5.2对合并的文件修改文件名为qiangc.

2.5.3 下载hdfs上的文件我们可以看到数据以制表符为分隔,我改成了以" ` "这个符号分隔.

修改前:

修改后:

2.6 重新上传一遍以" ` "分隔符来对数据进行分隔. 在对hdfs文件进行改写.上传分隔好的数据.在传入flume中.

2.7对数据进行清洗后.在hive中创建数据表.

create table qiangcheng(
id varchar(30),
jobname varchar(30),
jobmoney int,
jobcompany varchar(30),
jobdate DATE,
jobplace varchar(30),
jobexperience varchar(30),
jobneirong varchar(2000))
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties('input.regex'='(.*)`(.*)`(.*)`(.*)`(.*)`(.*)`(.*)`(.*)',
'output.format.string'='%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %10$s %11$s')
stored as textfile;

3.对hdfs中清洗的数据,创建表导入hdfs上的数据.

3.2从hdfs导入数据到hive,导入数据成功.

4.创建caiji表装自己想要的数据,来装取数据采集表

4.1 可以看到我们获得的数据.

5.把大数据工程师的数据插入到数据caiji当中.

5.1导入大数据工程师数据成功

5.1.2查看大数据工程师的数据.


6.把数据分析的数据插入到数据表caiji当中.

6.1插入数据分析成功

6.1.2查看我们的采集表(有数据、大数据工程师、数据分析).

7.现在对caiji表进行分析.

7.1我们要对jobmoney的工资进行数据分析.

7.1.1分析"数据分析",“大数据开发工程师”,"数据采集"等岗位的平均工资、最高工资、最低工资,做条形图展示.

7.1.2创建一个表用来计算所有数据的最大值、最小值、平均值.

7.1.3通过查看所有数据,发现jobmoney数据有为null的数据,所以对jobmoney为null的数据不要.

7.1.4 修改jobmoney为null的数据成功.

7.1.5计算数据分析的工资.

7.1.6由于数据少对数据进行模糊查询.

7.1.7可以的三个数据的最高工资、最低工资、和平均工资.

7.1.8我们创建三个表,来看个给地区的岗位数.

7.1.9我们来看各个地区的岗位数.

7.1.10 数据分析岗位数

7.1.11 大数据分析师岗位数

7.1.12 数据采集岗位数

8.我们来看工作个几年工作经验计算工资.

8.1 创建几年工资经验表(sannianggongzi).

8.2 把数据重dashujujingyan插入到sannianggongzi表

8.2.1 查看大数据岗位三年工资数据.

9.分析大数据岗位需求,查看大数据走向,做折线图展示.

9.1 创建数据表

把数据分割

9.2 查看数据表的内容

10.hive导入数据到HDFS

以下是我的数据

caiji 是大数据工程和数据分析和数据采集
allshuju 是三个数据采集和数据开发的平均最低最高工资
dashuju 是大数据各地区岗位个数
fenxi 是数据分析各个岗位的个数
shujucaiji 是数据采集岗位个数
dashujujingyang 是大数据三年经验
dashujudata 日期是几年的折线图
sannianggongzi 是大数据三年的工资
select * from hive_db; --> 需要导出的内容
# 数据分析表饼图
insert overwrite directory '/qiangcheng/1'
row format delimited fields terminated by '\t'
select * from fenxi;
#大数据开发工程师饼图
insert overwrite directory '/qiangcheng/2'
row format delimited fields terminated by '\t'
select * from dashuju;
# 数据采集饼图
insert overwrite directory '/qiangcheng/3'
row format delimited fields terminated by '\t'
select * from shujucaiji ;
#1-3年
insert overwrite directory '/qiangcheng/4'
row format delimited fields terminated by '\t'
select * from sanniangongzi;
# 三个职业薪资水平
insert overwrite directory '/qiangcheng/5'
row format delimited fields terminated by '\t'
select * from allshuju
# 带日期的表
insert overwrite directory '/qiangcheng/6'
row format delimited fields terminated by '\t'
select * from dashujudata 

10.1hive上传到hdfs

11.利用sqoop传入到mysql

11.1连接我的本地mysql

11.2创将数据表

11.3利用sqoop上传到mysql上.

命令

sqoop export --connect jdbc:mysql://127.0.0.1:3306/qianc --username root --password 12345678 --table dashujugongchengshi --export-dir  '/qiangcheng/2' --fields-terminated-by '\t' -m 1

11.3.1 sqoop导入mysql数据表

12.数据可视化

import pymysql
from pyecharts.charts import Bar
from pyecharts import options as optsdb = pymysql.connect(host="192.168.127.9",port=3306,database="qianc",user='root',password='12345678')
cursor = db.cursor()
sql = "select * from shujusannianmoney"
cursor.execute(sql)
data = cursor.fetchall()
print(data)
jobname = [data[0][0], data[1][0], data[2][0]]
print(jobname)
min_list = [data[0][2], data[1][2], data[2][2]]
max_list = [data[0][3], data[1][3], data[2][3]]
average_list = [data[0][1], data[1][1], data[2][1]]
bar = Bar()
bar.add_xaxis(xaxis_data=jobname)
# 第一个参数是图例名称,第二个参数是y轴数据
bar.add_yaxis(series_name="最低工资", y_axis=min_list)
bar.add_yaxis(series_name="最高工资", y_axis=max_list)
bar.add_yaxis(series_name="平均工资", y_axis=average_list)
# 设置表的名称
bar.set_global_opts(title_opts=opts.TitleOpts(title='职位工资分析', subtitle='工资单位:万/月'), toolbox_opts=opts.ToolboxOpts(),)
bar.render("岗位薪资图.html")

12.1 三年工资薪资图

12.2 数据分析饼图岗位地区个数

代码

import pymysql
from pyecharts.charts import Pie
from pyecharts import options as opts
db = pymysql.connect(host="192.168.127.9",port=3306,database="qianc",user='root',password='12345678')
cursor = db.cursor()
sql = "select * from fenxi"
cursor.execute(sql)
data = cursor.fetchall()
print(data)
addr = ["北京","成都","广州","上海","深圳"]
geshu = [data[0][1],data[1][1],data[2][1],data[3][1],data[4][1]]
data_pair = [list(z) for z in zip(addr, geshu)]
data_pair.sort(key=lambda x: x[1])
# 画饼图
c = (Pie().add("", [list(z) for z in zip(addr,geshu)]).set_global_opts(title_opts=opts.TitleOpts(title="数据分析工程师地区岗位数",subtitle='单位:个数'),toolbox_opts=opts.ToolboxOpts()).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))).render("数据分析工程师地区岗位数.html")

12.3 大数据岗位分析图

12.4 数据采集

12.5 大数据1-3年经验工资

12.3 折线图

import pymysql
from pyecharts.charts import Line
from pyecharts import options as optsdb = pymysql.connect(host="192.168.127.9",port=3306,database="qianc",user='root',password='12345678')
cursor = db.cursor()
sql = "select * from dashujuriqi"
cursor.execute(sql)
data = cursor.fetchall()
riqi = []
geshu = []
for i in data:riqi.append(str(i[0]))geshu.append(str(i[1]))
print(geshu)
print(riqi)
data_pair = [list(z) for z in zip(riqi, geshu)]
data_pair.sort(key=lambda x: x[1])(Line(init_opts=opts.InitOpts(width="1000px", height="600px")).set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=False),xaxis_opts=opts.AxisOpts(type_="category"),yaxis_opts=opts.AxisOpts(type_="value",axistick_opts=opts.AxisTickOpts(is_show=True),splitline_opts=opts.SplitLineOpts(is_show=True),),).add_xaxis(xaxis_data=riqi).add_yaxis(series_name="大数据岗位需求变化趋势",y_axis=geshu,symbol="emptyCircle",is_symbol_show=True,label_opts=opts.LabelOpts(is_show=False),).render("大数据岗位需求变化趋势.html")
)

13.总结

爬取招聘网站,使用hadoop、flume、mysql、hive、sqoop、python、scrapy、pyerchart、pymysql、运用这些知识,在做当中,我对hdfs和大数据flume传输更加熟悉,遇到很多问题,也能慢慢去解决这些问题.收获到了很多知识.对学习到的知识,能够运用.也明白自己很多不足,要继续努力去学习.

大数据 爬取网站并分析数据相关推荐

  1. 【爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩】

    [爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩] https://b23.tv/TIoy6hj

  2. 如何爬一个网站的数据-免费爬取网站的任意数据软件

    如何爬一个网站的数据?爬取网络数据大家称之为网络爬行 收集页面以创建索引或集合.另一方面,网络抓取下载页面以提取一组特定的数据用于分析目的,例如,产品详细信息.定价信息.SEO 数据或任何其他数据集. ...

  3. 网贷数据爬取及据分析

    关于数据来源 本项目写于2017年七月初,主要使用Python爬取网贷之家以及人人贷的数据进行分析. 网贷之家是国内最大的P2P数据平台,人人贷国内排名前二十的P2P平台. 源码地址 数据爬取 抓包分 ...

  4. 使用Selenium爬取网站表格类数据

    本文转载自一下网站:Python爬虫(5):Selenium 爬取东方财富网股票财务报表 https://www.makcyun.top/web_scraping_withpython5.html 需 ...

  5. 数据可视化课程设计——北京新发地官网数据分析与可视化展示【内容在jupyter notebook里面展示】包含数据爬取与可视化分析详解

    目录 一.课题说明 1.1.设计原因: 1.2.设计目标: 1.3.开发环境: 1.4.爬取网站链接 二.准备工作 2.1.数据获取: 2.2.爬取的数据说明: 2.3.爬虫程序设计的思路: 三.详细 ...

  6. 数据爬取到可视化分析

    文章目录 一.数据爬取 1.python简介 2.什么是网路爬虫 3.网页解析 4.数据爬取流程 二.数据清洗 1.数据格式统一处理 2.信息标题特殊字符处理 三.数据分析以及可视化 1.什么是pan ...

  7. Github每日精选(第75期):colly 爬取网站所有的数据

    colly colly 是一个优雅的 Golang 爬虫框架. colly 提供了一个干净的接口来编写任何类型的爬虫/scraper/spider. 使用 Colly,您可以轻松地从网站中提取结构化数 ...

  8. 基于python的自媒体和官媒数据爬取、可视化分析及云词图制作

    创作不易,如果以下内容对你有帮助,别忘了点一个赞,让更多的小伙伴能看到吧~~ 1. 问题描述 为了研究自媒体和官媒的传播新闻<武汉快递小哥汪勇的先进事迹>的及时性和传播力度,对比两种传播途 ...

  9. 全国各地农产品蔬菜数据爬取并可视化分析

    全国各地农产品蔬菜数据爬虫 - 可爬取任意年月份 - 数据部分展示如下(2022年1月) 数据部分展示如下(2022年2月)白菜数据 可结合可视化程序效果图如下: 秋秋2777.077.178(忽略. ...

最新文章

  1. xmemcached发布1.3.4
  2. 一个普通大学生的经历
  3. SOAR SQL进行优化和改写的自动化工具
  4. 生成技术在人工智能平台中的应用探索
  5. nginx动静分离配置_Nginx动静分离配置实例
  6. 排序算法 - 快速排序(java)
  7. 可用和平精英画质助手iApp源码+全开源
  8. dmx512 java_DMX512控制协议及其实现
  9. 【专升本计算机】计算机文化基础练习题(选择题300道附答案)
  10. ubuntu20.04设置静态IP地址
  11. Ubuntu19.04 创建桌面快捷方式
  12. CommonAPI-SomeIP 使用
  13. 数据结构分类及八种常见数据结构
  14. 前端小白入门之css
  15. linux内存占用率高怎么办,Linux下如何解决高内存使用率问题?
  16. Python批量转换文件夹下图片为PDF
  17. 为什么IT白领生命如此短暂--猝死!!! 让所谓的PMP和IT项目管理见鬼吧。
  18. 移动收款功能(未完成,无参考价值)
  19. Windows 11 应用商店打不开,点了没反应解决办法,亲测可用
  20. Ceph用户:中国用户统计表(2018年度)

热门文章

  1. 与业务深度融合,泛微协助大型集团搭建一体化的合同管理平台
  2. HT-海思hi3536A开发板详解
  3. 利用 Logarithmic Binning (Log-Binning)方法绘制幂律分布(Power-law Distributions)曲线
  4. 【DSY-2117】摩尔庄园
  5. 商品期货的估值与驱动
  6. excel怎么截取字符串
  7. mysql数据库主备表校验与修复
  8. c 语言程序设计 英文,c程序设计语言 英文版
  9. 游戏网站怎样对接支付(知识介绍)
  10. 读不到盘如何恢复数据?硬盘不被识别数据恢复?硬盘无法识别的原因