R语言获取丁香园疫情数据(动态网站)

这个文章已经更新了,请看我公众号文章:

链接为:
爬丁香园数据

对上面文章追加更改:
内容追加

历史数据也已经上线:
历史数据-公众号pypi

前篇数据可视化,数据获取都是靠的别人给的api,但是,中国人就喜欢自力更生。​经过我尝试几次,原来R爬取动态网站也很简单。​呼噜噜,接下来就让我们来试一试如何做:

​第一步,安装软件:

这里主要用到的肯定是​R和Rstudio,唯一需要的是安装一个软件叫phantomjs和写一个js文件。

phantomjs​可以从这个网站上下载:https://phantomjs.org/download.html

win系统就是下载这个zip压缩文件。然后解压,我就是将这个文件解压到D盘下:

一定要知道这个在什么位置,不要放到桌面之类的,尤其是对一些不会写代码的人,路径一定要简单,虽然你将文件放在桌面,看起来你可以看得到,但是桌面的路径远远比你直接放在d盘要复杂的多。一步一步打开,然后就会看到phantomjs.exe这个软件,鼠标选择单击左键选中,然后右键​查看属性。就可以看到位置在哪里,复杂phantomjs.exe​所在的位置。​比如我的位置就是:D:\phantomjs-2.1.1-windows\bin

接下来进入Rstudio,查看一下我在的​工作目录:

很明显,就是在文档下面的stdr文件夹内。

接着我们在Rstudio新建一个文件,​这样做:

上面的gif就是说,在Rstudio里面新建一个文本文件,然后保存为my_js_dxy.js(这里js后缀代表为js文件)

在my_js_dxy.js文件里面复制下面的代码:

// scraper_dxy.js// Create a webpage object
var page = require('webpage').create();// Include the File System module for writing to files
var fs = require('fs');// Specify source and path to output file
var url  = 'https://3g.dxy.cn/newh5/view/pneumonia?scene=2&clicktime=1579579384&enterid=1579579384&from=timeline&isappinstalled=0'
var path = 'dxy_web.html'page.open(url, function (status) {var content = page.content;fs.write(path,content,'w')phantom.exit();
});

最后保存好之后,可以在文件夹看到这个文件​:

当上面phantomjs软件下载好,my_js_dxy.js文件都写好之后,接下来将完全在R​studio里面进行处理。

system("D:/phantomjs-2.1.1-windows/bin/phantomjs my_js_dxy.js")
[1] 0
dir()
[1] "ave_people.csv"                "bili_food011202.R"
[3] "C400002AW3TG3OgEer.m4a"        "data-raw"
[5] "descriptions.csv"              "dxy_web.html"
[7] "filea9852ab4865.gif"           "gmail_creds"
[9] "gzh_0127.R"                    "gzh_0127001.R"
。。。。。。

第一行代码含义:在R里面,可以使用system()函数运行系统软件,这里指定了D:/phantomjs-2.1.1-windows/bin/文件夹下的phantomjs文件运行stdr文件夹里的my_js_dxy.js文件。​(这里一定要注意,我在R里面写的路径斜杠是反过来的,而win系统里面的斜杠是相反的)。等待一会,就会出现一个打印出0。可能是代表没有错误。​然后通过dir()函数就可以查看,有个文件产生了,这个文件叫dxy_web.html。为什么叫这个名字,你仔细查看一下my_js_dxy.js这个文件的11行代码,就知道了,是我设置的,你也可以改成别的名字。仔细查看Rstudio的file这个窗口,按照​修改的时间降序,就可以看到第一个文件:

其实这个部分,就是已经将动态的​丁香园网站数据保存好了。一切数据都在这个dxy_web.html​文件里面。接下来就是很常规的方法​,使用rvest、​等一系列基础的包,就可以将数据保存。

​具体代码如下:

library(rvest)
library(tidyverse)
url <- "dxy_web.html"
withjs <- read_html(url) %>% html_nodes("script#getAreaStat") %>% html_text()library(jsonlite)
my_data <- sub("\\}catch\\(e\\)\\{\\}", '', sub("try \\{ window.getAreaStat = ", '', withjs))
my_data_finall <- fromJSON(my_data)

第一行到第三行是加载包,第四行是刚才处理的文件的名字,这些一定要一样,除非都搞懂了具体是什么意思(其实js和R都差不多,也没什么差距,编程语言都大同小异,只要好好看看一看,还是好理解的)​。​第五行和第六行就是将国内各个省的数据保存下来(这个withjs经过第七行数据的处理,就变成json格式的数据,尽管是字符串形式,然后使用fromJSON()函数将文件字符串处理一下,就传给my_data_finall。​第七行就是将withjs字符串掐头去尾。

数据经过运行,然后就可以查看my_data_finall数据框了。

依次点击1, 2, 3,就可以看到你想要的数据。​这就是国内数据就获取了。

那么想要国外数据怎么获取?也很简单,代码如下:

withjs <- read_html(url) %>% html_nodes("script#getListByCountryTypeService2") %>% html_text()library(jsonlite)
my_data_foreign <- sub("\\}catch\\(e\\)\\{\\}", '', sub("try \\{ window.getListByCountryTypeService2 = ", '', withjs))
my_data_finall_foreign <- fromJSON(my_data_foreign)

这个时候查看my_data_finall_foreign数据框就可以看到了。

依次点击1,2,就看到国外的了。​是不是很简单。

R语言获取丁香园疫情数据动态网站相关推荐

  1. Python获取丁香园疫情数据并解析json数据

    Python获取丁香园疫情数据并解析json数据 在利用pyecharts V1.x版本,使用Map对象进行制图时,对数据格式的要求比较高,如果数据格式不正确可能达不到我们预期的效果.在我的前一篇文章 ...

  2. python爬虫------从丁香园疫情首页提取世界各国的疫情数据

    菜鸟自学python记录 初级爬虫学习(在B站上看的"黑马程序员180分钟轻松获取疫情数据,Python爬虫入门课",此次是自己跟着写的简易代码) import requests ...

  3. R语言获取特定时间段的数据

    获取特定时间段的表格数据方法: 1. 方法一:正则表达式 data <- read.csv('F:/data.csv') date <- as.Date(data$Date) #获取201 ...

  4. 利用R语言获取最新所有股票数据

    本文利用这里提到的方法,进行改进,从而批量获取所有股票的数据,并对股票数据进行了简单的统计. 首先使用该程序需要用到一个csv文件,记录了各个股票的名称和代码. 格式如下: 至于制作的话,还是挺简单的 ...

  5. 利用丁香园数据生成疫情分布地图(R语言)| 博文精选

    来源 | CSDN 博客 作者 | 万里写入胸怀间 责编 | Carol 出品 | CSDN云计算(ID:CSDNcloud) 疫情牵动大家,除了做好分内工作,管好自己不给社会添乱,也就是只能持续关注 ...

  6. Python爬取新冠肺炎疫情实时数据(丁香园)

    腾讯和丁香园疫情数据爬虫脚本和近2个月数据可自行下载: https://download.csdn.net/download/vdrere/12400191 https://download.csdn ...

  7. [转载] python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    参考链接: Python vars() python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造 ...

  8. python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python ...

  9. 丁香园开放医疗数据平台,覆盖药、病、诊、科研等7大应用场景

    1月12日,国内领先的数字医疗健康科技企业丁香园宣布推出专业级医疗数据开放平台(open.dxy.cn),该平台为业内首家可全面覆盖药品.疾病.医院.科室.诊疗.医学资讯等多场景应用的开放式数据平台, ...

最新文章

  1. 静态方法、类方法、属性方法
  2. 理想的计算机职业作文100,我的理想作文100字(通用30篇)
  3. android 6.0虚拟内存,Maxwell的统一虚拟内存只用在专业卡上,GTX 750 Ti或无缘
  4. 卸载64位python3.6再安装32位python3.6
  5. Shell脚本中字符串的一些常用操作
  6. R语言与概率统计(四) 判别分析(分类)
  7. Centos上虚拟机搭建
  8. Docker初识与安装
  9. 创建虚拟目录http://localhost:1780/失败,错误:无法访问iis元数据库。您没用足够的特权访问计算机上的IIS网站...
  10. python可以和java共存吗_python3 and python2 共存
  11. 六月计划#2A(6.10-6.16)
  12. vgcreate 创建卷组
  13. 常用的默认端口号(HTTP\HTTPS\FTP)
  14. gif软件(ShareX)
  15. 【信息】三方协议签订相关问题及解答
  16. 怎样用比较器实现信号的衰减和饱和_【白皮书】利用信号调理提高测量质量(中)...
  17. 对大学生就业难的认识
  18. Win7系统下的立体声混音录音的声卡的设置方法
  19. Java无法输出gc日志_【GC分析】Java GC日志查看
  20. install cgminer on linux

热门文章

  1. maven基础:mvn命令常用参数整理;如:-am构建指定模块,同时构建指定模块依赖的其他模块
  2. 原型设计Axure的基本使用
  3. SpringBoot 实现统一参数校验
  4. java二维数组添加数据_我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊...
  5. 苹果cms简洁精美影视模板整站源码
  6. 非计算机类专业毕业生五年程序员职业生涯的回顾和思考
  7. 什么是服务治理?为什么需要服务治理?
  8. Telnet - 访问8080端口并发送数据
  9. 【Shader与ShaderToy 】画一个五角星
  10. Android 最小化界面