psubnwell / baidu-hospital-crawler

「百度医生」三甲医院数据爬取练习(数据公开)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

「百度医生」三甲医院数据爬取计划

致谢

感谢孔哥@FieldSoft-HelloClyde 在Java方面的帮助:sunglasses:

更新

  • 「百度医生」已经于2017年4月1日正式关闭,为了让开源社区能够继续利用这份数据,我们已经公开于2016年5月29日从「百度医生」上爬取的全国三甲医院数据(.xlsx数据文件和.html页面源文件)。由于后续网站的样式不断再改变,使得之前编写的爬虫代码失效,因此这批数据是最后的数据了,显然这批数据有时效性的问题。另外由于众所周知的百度医疗事件,请自行承担使用该数据的后果。

百度医生关停公告

关停时间安排如下:

2017年3月10日起,停止提供预约挂号、快速咨询、专家咨询服务,同时下线第三方提供的其它所有服务,之前生成的有效订单可正常使用;

2017年3月24日起,积分商城关闭,积分余额将无法使用;

2017年3月31日起,停止提供查询功能,包括历史订单、健康档案等所有用户记录,请您务必在此之前自行留存重要数据,以免损失;

2017年4月1日,产品正式关停并清空数据。

1 简介

自从「魏则西事件」以来,出于兴趣想爬取一份全国三甲医院名单。本项目做练习用,请自行承担使用该数据的后果。

1.1 基本概念

**医院采用“三级十等”来划分级别。从低到高分别是“一级丙等、一级乙等、一级甲等、二级丙等、二级乙等、二级甲等、三级丙等、三级乙等、三级甲等、三级特等”。“三级特等”极少,因此归入“三级甲等”,可以说三甲医院就是最高级别的医院。(此外需要注意,部分医院为了对外宣传,常在主页上将“三乙”“三丙”级别的医院称作“三级”医院,他们不是“三甲”,请注意!)

1.2 相关数据库

经过初步调研,有如下几个数据库:

  • 国家卫计委(原卫生部)入口的官方全国数据库 - **医院等级查询系统HQMS

    • 数据库虽写着“医院信息来源截止至XX年XX月XX日”,但其实该日期总为系统当天。实际比对发现已经比较过时(例如,与黑龙江省卫计委独立提供的官方数据相比,缺失近1/3三甲医院)。
    • 不新、不全、不含部队医院和中医院(似乎不归卫计委管辖)。
  • A-hospital 医学百科 - 全国三甲医院名单

    • 仿维基百科式的数据库,界面较为直观清爽。也提供除了医院名单外其他医学信息。
    • 抽检发现仍有误,但未具体统计覆盖率和正确率。
    • 由于本人调研时间为2016年05月左右,当时检查该条目的修订历史,发现2015年8月25日起就未修订过。该条目自2016年7月21日起修订较频繁。但由于是网络百科,网友可自由修订,修订者水平不一,请自行判断。(但有这样一个百科无疑是十分幸运的,有精力的网友可以用本项目的爬虫数据继续为该百科做出贡献!)
  • 百度医生(已于2017年4月1日正式关闭)

1.3 数量统计

对于全国三甲医院总数,各个数据库显示不同。「**医院等级查询系统HQMS」显示约700+,但这个数据不包含军队医院和中医院。「A-hospital 医学百科」亦有名单,但本人没有对其统计。「百度医生」则显示约1300+,鉴于本项目采集自「百度医生」,分析其各地区分布主要如下所示(2016年5月29日数据):

  • 华北地区 212
    • 北京市 72
    • 天津市 31
    • 河北省 47
    • 山西省 48
    • 内蒙古自治区 14
  • 东北地区 161
    • 辽宁省 53
    • 吉林省 30
    • 黑龙江省 78
  • 华东地区 463
    • 上海市 53
    • 江苏省 68
    • 浙江省 77
    • 安徽省 48
    • 福建省 45
    • 江西省 46
    • 山东省 99
  • 中南地区 336
    • 河南省 59
    • 湖北省 70
    • 湖南省 44
    • 广东省 121
    • 广西壮族自治区 32
    • 海南省 10
  • 西南地区 111
    • 重庆市 22
    • 四川省 53
    • 贵州省 18
    • 云南省 17
    • 西藏自治区 1
  • 西北地区 78
    • 陕西省 32
    • 甘肃省 19
    • 青海省 9
    • 宁夏回族自治区 6
    • **维吾尔自治区 12

合计:1334(不含香港特别行政区、澳门特别行政区、**地区)

但该数据也有冗余和错误,这锅我不背都是爬虫的统计结果我只是搬运工(此句划掉)(见下方数据已知缺陷讨论),此结果仅供参考。

1.4 调研时间

2016年05月

2 数据

2.1 Demo

zj_demo

示例文件:浙江省三甲医院基本数据(未精校)

2.2 公开数据

所有公开数据位于data目录下,每一个子目录是一个**大陆一级行政区(不含香港特别行政区、澳门特别行政区、**地区)名字,合计31个。

每一个行政区子目录下,一般有如下文件:

  • *.xlsx 该行政区下三甲医院的基本数据(含医院名、所在地级市、地址、电话、简介)。

  • html 该目录下是该行政区下所有三甲医院在「百度医生」上的原始页面,可以用浏览器打开。由于这是原始页面,包含的信息比前述*.xlsx更多(*.xlsx正是从中抓取了部分信息),你可以自己编写正则表达式来抓取更丰富的信息(如重点科室等)。

2.3 数据已知缺陷

由于**医院的情况本身异常复杂,即使经过「百度医生」团队的审核和整理,最后爬取的结果还是有许多缺陷。本项目下的.xlsx文件内的数据没有经过精校,目前已知的错误有:

  1. 一院多名干扰:随着发展,医院的全称是不断再改变的,一个医院甚至多达三个名字的情况都不少见。比如哈尔滨医科大学附属肿瘤医院,又叫哈尔滨医科大学附属第三医院,又叫黑龙江省肿瘤医院。有时候会重复。

  2. 分院重复:“XX分院”“XX院区”有时是单独的,有时又并入总院一个条目。

  3. 中文简称现象:如“中医院”和“中医医院”、“黑龙江”和“黑龙江省”在部分条目中会混用,尽管医院本身都有一个切确的名字,但是在这么多医院录入数据库的时候就容易出现偏差。还有“**人民解放军第二〇五医院”、“第二0五医院”、“第205医院”混用等。

  4. 错误现象:比如误将有的“三级”医院误列入“三甲”名单等。

3 精校操作指南

本项目所爬取的数据已经全部公开,如果您有精力,可以在此基础上为其精校。

对于每一个三甲医院条目(excel表中一行),可进行下述工作:

3.1 总体数据规范化

首先,大致浏览该条目,有没有出现上述不规范细节、缺少信息,通常一眼看去就能大概看出条目是否有大问题。

3.2 细节数据精校

然后,在搜索引擎中搜索该医院,校对、修正细节,下面要点供参考:

  1. 医院级别

    • 首要确定该点,若发现是“三级”而不是“三甲”,请剔除该条目。
  2. 医院全称

    • 检查是否规范。如上面提到的如“中医院”/“中医医院”、“黑龙江”/“黑龙江省”、“第二〇五医院”/“第二0五医院”/“第205医院”情形。

    • 部分医院名字有多个,请在该栏内填入正规常用的全称,其余名字可以补充到最后一栏“别名”。此外“第X医院”视为不同医院,但“XX院区”视为同一医院,请合并,并将地址合并。

  3. 医院地址

    • 如发现缺省名的,补全;

    • 如发现缺少门牌号的,补全;

    • 如有多个院区的,则可以改成如下格式“辽宁省沈阳市和平区三好街36号(南湖院区);辽宁省沈阳市铁西区滑翔路39号(滑翔院区)”。

  4. 总机电话

    • 如果遇到个别条目没有电话、格式不对、列了多个电话的,请搜索后填入只填入总机电话即可。因为医院电话一般有很多,除了总机电话还有什么门诊、预约、咨询电话,若没有总机电话则选一个你认为有代表性的电话即可。
  5. 官方网址

    • 此栏目前全空着,请填入查到的官方网址。一般来说百度已经认证了大部分的官方网站,标志很明显。但注意有些医院并没有官方网址,请勿填入诸如haodf.com、yyk.fh21.com.cn/、yyk.39.net/、yyk.99.com.cn/之类的网址!
  6. 医院简介

    • 检查是否有张冠李戴的情况。
    • 缺少就摘一段补上。

3.3 帮助更新

公开数据采集的时间点是2016年5月29日。鉴于「百度医生」已经关闭,无法从源进行更新。如您有时效性的需要,恐怕只能自行采用手动更新了。

4 运行(本部分已作废)

更新:

  • 随着「百度医生」页面的样式不断改变,以及最终的关闭,这部分已经失效。:disappointed_relieved:

4.1 Java 部分

该部分用于抓取各医院的页面地址。

.java源代码位于./src下,用javac来将其转化成.class文件。

注意依赖的gson-2.5.jar位于./lib下,因此需要用-classpath(或简写-cp)来指定依赖包位置。

-d用于指定生成.class文件的位置。

$ cd src/
$ javac -classpath ../lib/gson-2.5.jar -d ../bin *.java

执行Main.class文件:

$ cd ../bin/
$ java -classpath .:../lib/gson-2.5.jar Main 

生成的结果位于./url内:

$ cd ../url/
$ ls
hn_hospital_url.txt

默认以抓取海南的三甲医院名单为例,更换其他省份需修改Main.java中的provId值(地域代码);同理如需获取“三级”、“三乙”等,需修改Main.java中的hospitalLvl值。

4.2 Bash Script 部分

该部分用于批量下载页面,并从页面抓取信息。

根据网址批量下载页面可以使用wget:

$ wget -i hn_hospital_url.txt

需等候一段时间,结束后可以执行提取信息脚本extract.sh:

$ ./src/extract.sh

4.3 Python 部分

可以用 Python 的 Pandas 来自动提取信息并生成电子表格。

About

「百度医生」三甲医院数据爬取练习(数据公开)


Languages

Language:HTML 100.0%Language:Java 0.0%Language:Shell 0.0%