前言
个人大数据的期末大作业,用python按城市寻找爬取、分析和保存了珍爱网相亲的征婚信息,然后进行数据可视化分析。
一、数据的爬取,分析,清洗与保存
1.数据的爬取
网站来源如下
def getDate(baseurl):
datalist = []
citylist = ['beijing/'
,'shanghai/','tianjin/','changchun/','shijiazhuang/','lanzhou/','xining/',
'xian/','zhengzhou/','jinan/','taiyuan/','hefei/','changsha/','wuhan/','nanjing/','chengdu/','guiyang/','kunming/',
'hangzhou/','nanchang/','guangzhou/','fuzhou/'
]
for i in citylist:
url1 = baseurl + i
for j in range(1,7):
url = url1 + str(j)
html = askURL(url)
2.数据的分析
1.数据的清洗
分析数据中用到了正则表达式查找筛选指定字符串。但因为珍爱网的每一栏都是采用相同的标签和class,这样就不知道是在哪里结束。所以正则表达式后面加上下一栏标签内的文字,就能分清在哪里结束了。 图1
因为相亲男女的其他各栏属性都相同,但其中有一栏男士对应的是月薪,女士对应的是学历。所以可以分开处理。男士的学历和女士的月薪就标记为“未知”。 图2
#详情链接
findLink = re.compile(r'')
#图片的链接
findImgSrc = re.compile(r' #姓名 findName = re.compile(r'(.*)') #性别 findGender = re.compile(r'性别:(.*) #居住地 findPlace = re.compile(r'居住地:(.*) #年龄 findAge = re.compile(r'年龄:(\d*) #月薪 findWage = re.compile(r'月 薪:(.*) #学历 findDip = re.compile(r'学 历:(.*) #婚况 findKuang = re.compile(r'婚况:(.*) #身高 findHeight = re.compile(r'身 高:(\d*) #信息 findDetails = re.compile(r' wage = re.findall(findWage, item) if len(wage) != 0: wage = wage[0] data.append(wage) else: data.append("未知") diploma = re.findall(findDip, item) if len(diploma) != 0: diploma = diploma[0] data.append(diploma) else: data.append("未知") 2.数据的保存 使用SQLite将数据保存入数据库中,得到结果 def saveData(datalist,dbpath): init_db(dbpath) conn = sqlite3.connect(dbpath) cur = conn.cursor() for data in datalist: for index in range(len(data)): if index == 5 or index == 9: continue data[index] = '"'+data[index]+'"' sql = ''' insert into zhenaizhenghun ( info_link,pic_link,name,gender,place,age,wage,diploma,hun,height,details) values (%s)'''%",".join(data) print(sql) cur.execute(sql) conn.commit() cur.close() conn.close() 二、数据可视化部分 1.前端框架 前端框架采用的是Start Bootstrap上面的模板,下载好想要的模板直接使用就可以了。 网址:Start Bootstrap 2.写入表格 将数据库的数据写入前端界面中的表格中,代码以及结果如下 {% for person in zhenai %} {{ person[3] }} 查看图片 {% endfor %} 3.echarts图表实现可视化 复制JS代码,在echarts官网选用合适的图表,将数据库的数据写入。实现可视化。 (1)婚姻状况的可视化代码以及结果 var dom = document.getElementById('container'); var myChart = echarts.init(dom, null, { renderer: 'canvas', useDirtyRect: false }); var app = {}; var option; option = { title:{ text:'相亲男女婚姻状况' }, tooltip: { trigger: 'item' }, legend: { top: '5%', left: 'center' }, series: [ { name: 'Access From', type: 'pie', radius: ['40%', '70%'], avoidLabelOverlap: false, itemStyle: { borderRadius: 10, borderColor: '#fff', borderWidth: 2 }, label: { show: false, position: 'center' }, emphasis: { label: { show: true, fontSize: '40', fontWeight: 'bold' } }, labelLine: { show: false }, data: [ { value: {{ num2[0] }}, name: '{{ hun[0] }}' }, { value: {{ num2[1] }}, name: '{{ hun[1] }}' }, { value: {{ num2[2] }}, name: '{{ hun[2] }}' } ] } ] }; if (option && typeof option === 'object') { myChart.setOption(option); } window.addEventListener('resize', myChart.resize); (2)学历分布的代码 var dom = document.getElementById('contain'); var myChart = echarts.init(dom, null, { renderer: 'canvas', useDirtyRect: false }); var app = {}; var option; option = { title:{ text:'相亲男女学历分布' }, legend: { top: 'bottom' }, toolbox: { show: true, feature: { mark: { show: true }, dataView: { show: true, readOnly: false }, restore: { show: true }, saveAsImage: { show: true } } }, series: [ { name: 'Nightingale Chart', type: 'pie', radius: [50, 250], center: ['50%', '50%'], roseType: 'area', itemStyle: { borderRadius: 6 }, data: [ { value: {{ num1 [0]}}, name: '{{ diploma [0]}}' }, { value: {{ num1 [1]}}, name: '{{ diploma [1]}}' }, { value: {{ num1 [2]}}, name: '{{ diploma [2]}}' }, { value: {{ num1 [3]}}, name: '{{ diploma [3]}}' }, { value: {{ num1 [5]}}, name: '{{ diploma [5]}}' }, { value: {{ num1 [6]}}, name: '{{ diploma [6]}}' } ] } ] }; if (option && typeof option === 'object') { myChart.setOption(option); } window.addEventListener('resize', myChart.resize); (3)年龄分布的可视化代码以及结果 var dom = document.getElementById('main'); var myChart = echarts.init(dom, null, { renderer: 'canvas', useDirtyRect: false }); var app = {}; var option; option = { title:{ text:'相亲男女年龄分布' }, color:['#3398DB'], tooltip:{ trigger:'axis', axisPointer:{ type:'shadow' } }, grid:{ left:'3%', right:'4%', containLabel:true }, xAxis: { type: 'category', data: {{ age }} }, yAxis: { type: 'value' }, series: [ { data:{{ num }}, barWidth:'60%', type: 'bar' } ] }; if (option && typeof option === 'object') { myChart.setOption(option); } window.addEventListener('resize', myChart.resize); 相关链接居住地:') 年龄:') .*[月 薪:学 历:]') 婚况:') 婚况:') 身 高:') ')序号 昵称 图片 性别 居住地 年龄 月薪 学历 婚况 身高 个人简介 序号 昵称 图片 性别 居住地 年龄 月薪 学历 婚况 身高 个人简介 {{ person[0] }} {{ person[4] }} {{ person[5] }} {{ person[6] }} {{ person[7] }} {{ person[8] }} {{ person[9] }} {{ person[10] }} {{ person[11] }} 本文由 用户 于 2024-01-13 发布在 金钥匙,如有疑问,请联系我们。
本文链接:https://www.51969.com/post/18138898.html
发表评论