互联网医疗公司,有一个完整、完全、正确的药品库非常重要;今天来说一说小编在上一个东家为了建立一个自己的药品库是怎么做的。首先我们是一家小公司,但是我们有一个纽约敲钟的梦想,虽然就要闹得发不了工资、最终还闹上了劳动仲裁委,就是不说了,满满的都是泪,“宝宝,我没有用~~~”。
首先分析对手,目前国内做互联网医疗的公司非常多,但是做的还可以的就那么几家,而且做医药商城、药品比较齐全的主要有京东医药、360好药、阿里健康等,但是他们也不是最全的,药品最全的要数国家药监局
今天就来看看怎么使用JAVA把这个网站的数据爬下来,要爬数据,首先要先分析一下网站的结构。分析网站发现这个国家级的网站,身负华夏千千万万人生命的药品的网站,做的确实烂,不知道找了国内哪个大学的、还没毕业的研究生做了。并不想黑哪个大学或者那些研究生。打开谷歌浏览器的js调试器,发现代码中大量充斥debugger对象,是一个测试网站吗?
步骤一: 在药品列表页随便找一条药品数据查看代码
<a href="javascript:commitForECMA(callbackC,'content.jsp?tableId=63&tableName=TABLE63&tableView=药品注册补充申请备案情况公示&Id=1214',null)">2.胆炎康胶囊 (贵州百灵企业集团制药股份有限公司CYZB0801888黔)</a>
步骤二: 继续分析点击一下任何一条药品数据
http://app1.sfda.gov.cn/datasearchcnda/face3/content.jsp?tableId=63&tableName=TABLE63&tableView=%D2%A9%C6%B7%D7%A2%B2%E1%B2%B9%B3%E4%C9%EA%C7%EB%B1%B8%B0%B8%C7%E9%BF%F6%B9%AB%CA%BE&Id=1213&MmEwMD=GBK-29dira8NcGmy70MjYEuX.g4LnWi1GvHrOnsfFiCvyQ88RHewUbaSGAiUTgUgq4YevKCVC8bQ9_NkyfOXyuK.obd1rHWx0w4F3O.LrNzVU4u07._EXZzoUlnc4n.0NrH0l3vOaSMEdonpH9Sjx5A2mk_ZJiRP7ZFIqhLxWBKZD35rIIbLjt85LnM8mxObiJQ9zjUmlIuqbvj5tPQLesVJWcdQhTtqztm4TDOx1ywoanmtLWFGYzIkfECO0IJkPatXMvKmGrUomdOU2YzBwFf0_R2GDJUAyT.7k53qL2VpCBTuDsSAgOBzWwKVXoFWm7b96ttDBw8SdPT9rw9ZTEJ1jUQpOyTHV5BaXxqKvej6InqgEoAgY0444vleOaf28sStAhm3XvTbgErp_Dx_hGGbjXEUKhOheptsDWTE35ZD2n3FevH
经过以上两个步骤分析等到如下结论
步骤一:
content.jsp?tableId=63&tableName=TABLE63&tableView=药品注册补充申请备案情况公示&Id=1214
步骤二:
http://app1.sfda.gov.cn/datasearchcnda/face3/
把这两个拼起来并加以整理:
http://app1.sfda.gov.cn/datasearchcnda/face3/content.jsp?tableId=63&tableName=TABLE63&tableView=药品注册补充申请备案情况公示&Id=1214
这个链接放到浏览器访问数据就出来了,再继续分析一下这个链接有如下参数: tableId、tableName、tableView和Id
tableId、tableName、tableView这三个参数都有table,可以知道一定有存在什么关联。找啊找啊发现下图
所有的tableId、tableName、tableView这三个参数的值都在这个界面的所有链接里了;而Id参数,猜测是对应的药品的Id,来验证一下,这个链接是前面拼出来的
http://app1.sfda.gov.cn/datasearchcnda/face3/content.jsp?tableId=63&tableName=TABLE63&tableView=药品注册补充申请备案情况公示&Id=1214
把这个Id改成1215,你会发现惊奇的;数据果然出来了。
就可以大胆推测这个Id是药品的唯一主键,再大胆推测一下,是不是一个自增的Id,写一个循环从0到int类型的最大值就可以把某一种类型的药品的数据全部爬下来了。然后按照这些字段就可以把药品名称、规格、批准文号等爬下来了。
这个毕竟是国家级网站,这里代码就给出了,这里给大家点一下。要访问网站,首页就必须用到httpclient
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.7</version>
</dependency>
分析网站知道返回的是HTML代码,这样的话需要解释HTML代码,这样就要使用到
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
也可以使用(但是htmlparser已经很久没更新了,jsoup是新一代HTML解析器)
<dependency>
<groupId>org.htmlparser</groupId>
<artifactId>htmlparser</artifactId>
<version>2.1</version>
</dependency>