Python_爬虫_爬取好大夫网站_数据清洗部分

news/2024/5/20 22:20:53/文章来源:https://blog.csdn.net/weixin_44585839/article/details/90586059

1.前言

通过对好大夫网站内容的爬取,我们已经收集到好大夫的相关数据,并将其存入excel表中。之所以先存入excel表中,是因为有很多是非结构化数据,需要进行数据清理后在进行保存,excel中有很多的功能能够帮助进行数据清理,下图是获取的数据示例,一共获得20多万条数据。接下来进行数据清洗工作。
在这里插入图片描述
在这里插入图片描述

2.数据清洗规则

爬虫爬取的内容为:

  • 姓名_title
  • 医院
  • 科室
  • 医生主页url
  • 患者投票
  • 感谢信
  • 心意礼物
  • 总服务患者
  • 微信诊后报道患者
  • 总诊后报道患者
  • 开通时间
  • 姓名
  • 职称
  • 疗效满意度
  • 态度满意度
  • 价格类型1
  • 价格类型1价格
  • 价格类型2
  • 价格类型2价格
  • 价格类型3
  • 价格类型3价格
  • 电话接听率
  • 已咨询患者数

由于爬虫技术问题,再爬价格是并没有区分类型进行归类,因此顺序是乱序的,大致情况如图
在这里插入图片描述
在这里插入图片描述
因此,数据清洗任务主要有:

  • 对三种类型服务进行归类,分别将价格123对应图文问诊、一问一答、电话问诊
  • 删除16 18 20 行,并将17 19 21行对应的title改为对应的服务类型
  • 选择合适的记录:如咨询人数或者满意度为空则不适用这条数据
  • 格式化数据:1.包括一些数据列由string类型转为int数据类型;2.疗效满意度、态度满意度、电话接听率转为[0,1]数据类型;3.图文问诊、一问一答价格转化为int数据类型,并将电话问诊转化为每小时价格的int数据类型;4.通过开通时间计算开通天数(以2019/05/20为标准点)

3.step1去除缺省部分

这一部分主要针对不符合要求的信息进行筛选,标准是如果已有咨询人数不存在,认定该医生为不活跃医生,则清除这行数据。方法是:使用python对咨询人数进行检索,如为空,清楚该行数据,然后使用excel定位空行并删除。

import xlrd
import xlwt
from xlutils.copy import copy
import osurl = r"C:\Users\lenovo\Desktop\好大夫全部网页数据挖掘.xls"def dataClear(work_url):read_workbook = xlrd.open_workbook(work_url)write_workbook = copy(read_workbook)sheet_read = read_workbook.sheet_by_index(0)sheet_write = write_workbook.get_sheet(0)# 行和列nrows = sheet_read.nrowsncols = sheet_read.ncolsfor row in range(nrows):if ((sheet_read.cell(row, 19).value == '' orsheet_read.cell(row, 13).value == '') orsheet_read.cell(row, 14).value == ''):for i in range(ncols):sheet_write.write(row, i, '')# 保存os.remove(work_url)write_workbook.save(work_url)if __name__ == '__main__':dataClear(url)

运行结束的excel表如下:
在这里插入图片描述
接着再excel表中使用F5定位条件,找到空值进行删除
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.step2调整服务类型价格

import xlrd
import xlwt
from xlutils.copy import copy
import osurl = r"C:\Users\lenovo\Desktop\好大夫全部网页数据挖掘.xls"defult_num = 0def dataClear(work_url):read_workbook = xlrd.open_workbook(work_url)write_workbook = copy(read_workbook)sheet_read = read_workbook.sheet_by_index(0)sheet_write = write_workbook.get_sheet(0)# 行和列nrows = sheet_read.nrowsncols = sheet_read.ncols# 修改excel对应列的title为对应服务价格的名称sheet_write.write(0, 16, '图文问诊价格')sheet_write.write(0, 18, '一问一答价格')sheet_write.write(0, 20, '电话问诊价格')# 从excel第二行开始遍历,三种服务出现的顺序为图文问诊、一问一答、电话问诊# 可能出现类型不存在的情况,但只要出现顺序一定符合for row in range(1, nrows):if sheet_read.cell(row, 15).value == '一问一答':type = sheet_read.cell(row, 15).valueprice = sheet_read.cell(row,16).valuesheet_write.write(row, 15, '')sheet_write.write(row, 16, defult_num)sheet_write.write(row, 17, type)sheet_write.write(row, 18, price)elif sheet_read.cell(row, 15).value == '电话问诊':type = sheet_read.cell(row, 15).valueprice = sheet_read.cell(row, 16).valuesheet_write.write(row, 15, '')sheet_write.write(row, 16, defult_num)sheet_write.write(row, 18, defult_num)sheet_write.write(row, 19, type)sheet_write.write(row, 20, price)if sheet_read.cell(row, 17).value == '电话问诊':type = sheet_read.cell(row, 17).valueprice = sheet_read.cell(row, 18).valuesheet_write.write(row, 17, '')sheet_write.write(row, 18, defult_num)sheet_write.write(row, 19, type)sheet_write.write(row, 20, price)# 保存os.remove(work_url)write_workbook.save(work_url)if __name__ == '__main__':dataClear(url)

运行代码前后的数据对比图:
在这里插入图片描述
在这里插入图片描述

5.step3格式化数据

1)将str数据类型转化为int

在这里插入图片描述
也可以使用python进行转换:

import xlrd
import xlwt
from xlutils.copy import copy
import osurl = r"C:\Users\lenovo\Desktop\实验.xls"def dataClear(work_url):read_workbook = xlrd.open_workbook(work_url)write_workbook = copy(read_workbook)sheet_read = read_workbook.sheet_by_index(0)sheet_write = write_workbook.get_sheet(0)# 行和列nrows = sheet_read.nrowsncols = sheet_read.ncolsStrToIntList = [4, 5, 6, 7, 8, 9, 19]for row in range(1, nrows):for i in StrToIntList:value = sheet_read.cell(row, i).valuesheet_write.write(row, i, int(value))# 保存os.remove(work_url)write_workbook.save(work_url)if __name__ == '__main__':dataClear(url)
2).疗效满意度和态度满意度调整为百分比形式

相关代码为(也可以直接使用excel进行操作):

import xlrd
import xlwt
from xlutils.copy import copy
import osurl = r"C:\Users\lenovo\Desktop\实验.xls"def dataClear(work_url):read_workbook = xlrd.open_workbook(work_url)write_workbook = copy(read_workbook)sheet_read = read_workbook.sheet_by_index(0)sheet_write = write_workbook.get_sheet(0)# 行和列nrows = sheet_read.nrowsncols = sheet_read.ncolsChangeTo01 = [13, 14, 18]for row in range(1, nrows):for i in ChangeTo01:value = sheet_read.cell(row, i).valueif (i==13 or i==14):value = value.replace('满意', '')value = int(value)sheet_write.write(row, i, value/100)# 保存os.remove(work_url)write_workbook.save(work_url)if __name__ == '__main__':dataClear(url)

处理结果:
在这里插入图片描述

3)价格类型12整数化

这里可以直接使用excel的替换功能进行操作,处理结果为:
在这里插入图片描述

4)电话问诊转化为每小时服务价格

此处比较复杂,使用代码进行修改:

import xlrd
import xlwt
from xlutils.copy import copy
import osurl = r"C:\Users\lenovo\Desktop\好大夫全部网页数据挖掘.xls"def dataClear(work_url):read_workbook = xlrd.open_workbook(work_url)write_workbook = copy(read_workbook)sheet_read = read_workbook.sheet_by_index(0)sheet_write = write_workbook.get_sheet(0)# 行和列nrows = sheet_read.nrowsncols = sheet_read.ncolssheet_write.write(0, 17, '电话问诊每小时价格')for row in range(1, nrows):value = sheet_read.cell(row, 17).valuevalue = value.replace('元', '元元元元') # 防止价格宽度不一,先增长区分度str1 = value[:5]str2 = value[5:]money = (''.join([x for x in str1 if x.isdigit()]))min = (''.join([x for x in str2 if x.isdigit()]))result = int(money)/int(min)*60sheet_write.write(row, 17, result)# 保存os.remove(work_url)write_workbook.save(work_url)if __name__ == '__main__':dataClear(url)

完成后的效果为:
在这里插入图片描述

5)通过开通时间计算开通天数

我们收集到的开通时间形式如下图,保存数据类型为str,因此我们可以利用python将其改成year/month/day,然后通过excel中日期相减功能得到开通天数。
在这里插入图片描述
修改开通时间列的代码为:

import xlrd
import xlwt
from xlutils.copy import copy
import osurl = r"C:\Users\lenovo\Desktop\好大夫全部网页数据挖掘.xls"def dataClear(work_url):read_workbook = xlrd.open_workbook(work_url)write_workbook = copy(read_workbook)sheet_read = read_workbook.sheet_by_index(0)sheet_write = write_workbook.get_sheet(0)# 行和列nrows = sheet_read.nrowsncols = sheet_read.ncolssheet_write.write(0, 17, '电话问诊每小时价格')for row in range(1, nrows):value = sheet_read.cell(row, 10).valueyear = value[:4]month = value[5:7]day = value[8:10]sheet_write.write(row, 10, year+'/'+month+'/'+day)# 保存os.remove(work_url)write_workbook.save(work_url)if __name__ == '__main__':dataClear(url)

处理结果为:
在这里插入图片描述
进一步通过excel的相关功能:
在这里插入图片描述
至此我们完成了数据清洗工作。

6.总结

  • 进行数据清洗工作时,多种工具混合使用能在很大程度上提高效率。
  • 数据清洗的代码片段不应追求一次清洗完成,在清洗过程需要主翼抛出的exception,例如在电话问诊单位小时价格上,如出现缺省情况,使用int进行数据转换就会抛出错误。
  • 数据清洗的步骤很重要,确定好清洗步骤能节省很多时间,例如先出去意义不大的数据项。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_747900.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Apache服务部署静态网站。

1、安装Apache服务程序,命令后面的Apache服务的软件包名称为httpd。2、httpd服务程序并将其加入到开机启动项中3、在浏览器(这里以Firefox浏览器为例)的地址栏中输入http://127.0.0.1并按回车键,就可以看到用于提供Web服务的httpd…

php特级课---1、网站大访问量如何解决

php特级课---1、网站大访问量如何解决 一、总结 一句话总结: 负载均衡和冗余技术 1、负载均衡和冗余技术是一回事么? 并不是:负载均衡是用户分流;冗余技术是避免出现单点故障 负载均衡:将不同的用户分流到不同的服务器…

python实战教程:7万网站用户行为大数据的分析

今天的教程有点长,耐心点看完,你会有收获的。基础薄弱的伙伴,不清楚的可以留言,要视频学习教程的,可以留言! 7万网站用户行为大数据分析 数据分析师,是通过数据对业务团队决策、公司管理层的决…

手把手教你做毕业设计:基于JSP+MySQL的简单校园新闻网站(1)

系列教程来了!毕业设计头大的伙伴,看过来了!基础薄弱的伙伴,需要视频教程的,可以留言,我整理后发大家! 整体流程 做一个项目,首先是需求分析,将要做的东西说明白。 然后…

手把手教你做毕设计系列:基于JSP+MySQL的简单校园新闻网站(3)

系列教程(2)下一期出,保存的文件一下子打不开了,下期更新哈! 新建数据库 使用Navicat新建数据库shcoolnews。 为了保存管理员用户名、密码,新建user表,结构如下图。 简单解释下,i…

jquery找到第几个字符_10个可以找到jQuery承包商的网站

jquery找到第几个字符作为一名技能娴熟的前端Web开发人员,您可以选择以自由职业者,承包商或临时或永久任职的身份独立从事工作 。 或者,您可能只想在业余时间通过在线寻求一些项目工作来提高自己的技能。 因此,今天我列出了一些地…

10个可以找到jQuery承包商的网站

作为一名技能娴熟的前端Web开发人员,您可以选择以自由职业者,承包商或临时或永久任职的身份独立从事工作 。 或者,您可能只想在业余时间通过在线寻求一些项目工作来提高自己的技能。 因此,今天我列出了一些您可能会找到以jQuery /…

portfolio r语言_jQuery Mobile Portfolio网站模板

portfolio r语言我已经为jQuery4u博客读者免费开发了用于个人投资组合网站的基本jQuery Mobile模板 ! :)使用此模板的初始版本,功能特定于投资组合,您可以使用个人简历,投资组合图片库和联系表创建基本的移动投资组合网站。 这只是…

Python爬虫:爬取需要登录的网站

不少伙伴学爬虫,这就出一期Python爬虫教程,文末总结的有视频教程,自己按需学习哈! 爬虫在采集网站的过程中,部分数据价值较高的网站,会限制访客的访问行为。这种时候建议通过登录的方式,获取目…

创意网站精选

2019独角兽企业重金招聘Python工程师标准>>> https://gomockingbird.com/ framework my life to a professioner http://doubanmash.com/ doubanmash http://alphatown.com/ 阿尔法城,模拟网上商品城,做的确实不错。 http://c2.com/cgi/wiki?DesignP…

政府与金融行业网站为何必须安装SSL证书?

在了解SSL证书对于政府与金融行业网站的重要性之前,我们先来了解一下SSL证书是什么?根据百度百科上的解释,SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书…

【网站工具】PHPNow,PHPMyadmin,Apache,IIS,MySQL

近期在学习网站建站的一些基本知识,遇到几个工具 PHPNow,改名为servkit http://servkit.org/ 优点:适合新手快速入门,绿色版,免费 缺点: 1、只有中文版,英文操作系统就乱码啦 2、Apache可…

响应式网站设计_响应式网站的设计体验

响应式网站设计开始之前 响应式Web设计旨在确保网站的布局和内容流畅地扩展到可用的屏幕空间。 这是将投资集中在改善网站内容和用户功能上的绝妙方法,同时无论用户使用什么设备和屏幕大小来访问网站,都可确保用户获得良好的体验。 如果您没有阅读本系列…

响应式网站的设计体验

开始之前 响应式Web设计旨在确保网站的布局和内容流畅地扩展到可用的屏幕空间。 这是将您的投资集中在改善网站内容和用户功能上的一种绝佳方法,同时无论用户使用什么设备和屏幕大小来访问您的网站,都可以确保他们获得良好的体验。 如果您没有阅读本系列…

网站解密:从零开始学建站

为什么80%的码农都做不了架构师?>>> 网站解密:从零开始学建站 本书是为站长群体编写的一本入门级的书,它的定位是:对网站制作不清楚、对网站程序不了解、想成为一名站长的人。从基本的网站概念到一个网站上线所涉…

免费建站系统,Joomla 3.9.5发布

Joomla 3.9.5现已推出。这是针对3.x系列Joomla的安全修复程序版本,它解决了三个安全漏洞,包含20多个错误修复和改进。什么是3.9.5? Joomla 3.9.5包含三个安全漏洞修复程序以及一些错误和改进,包括: 安全问题已修复 低优…

【Python】Learn Python the hard way, ex50 第一个网站

利用lpthw.web框架实现"Hello World"网页版,代码如下: import weburls (/, index)app web.application(urls, globals())render web.template.render(templates/)class Index:def GET(self):greeting Hello Worldreturn render.index(gree…

bootstrap布局_5种以上的病态移动网站Bootstrap帮助器布局

bootstrap布局查看或收集5种以上的Sick Mobile网站Bootstrap帮助器布局 ,它们肯定会对使您的网站布局更敏感,更有趣! 请享用 :) 相关文章: 10个Metro Bootstraps和模板 jQuery Mobile引导程序&#xff0…

5种以上的病态移动网站Bootstrap帮助器布局

查看或收集5种以上的Sick Mobile网站Bootstrap帮助器布局 ,它们肯定会有助于使您的网站布局更具响应性和趣味性! 请享用 :) 相关文章: 10个Metro Bootstraps和模板 jQuery Mobile引导程序,模板&#xff0c…

网站防刷方案

2019独角兽企业重金招聘Python工程师标准>>> 网站防刷方案 网站重复请求解决方案 Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地51813186 1311366889086 755 29812080 <netkillermsn.com> 版权 © 2011, 2012,…