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

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,就看到国外的了。​是不是很简单。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuanzhoulvpi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值