R语言-004-爬取百度疫情数据

一、百度疫情

  1. 国内疫情汇总


    image.png
  2. 分省市疫情统计


    image.png
  3. 分省市新增疫情趋势


    image.png

二、爬取内容

  • 国内疫情汇总,截至时间的新增、累计汇总数据
  • 分省市疫情统计,截至时间的新增、累计数据
  • 分省市疫情统计,包含二级地区,历史90天的新增(新增确诊+无症状感染)数据

三、R语言实战

# @项目名称:爬取百度疫情数据
# @项目时间:2022-4-16
# @项目作者:斑专先生

# 加载包
library(rvest)
library(dplyr)
library(jsonlite)
library(stringr)
library(rlist)

# 百度疫情合集数据,list格式需要将其解析
bdyq_url <- 'https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_pc_3'
list_content <- read_html(bdyq_url) %>% html_nodes('#captain-config') %>% html_text() %>% fromJSON()
# 解析国内疫情数据
# 国内疫情
summaryDataIn <- list_content$component$summaryDataIn %>%
select(confirmedRelative,unOverseasInputNewAdd,overseasInputRelative,asymptomaticRelative,
         curConfirm,curLocalConfirm,curOverseasInput,asymptomatic,
         confirmed,overseasInput,cured,died) %>%
  mutate(title=list_content$component$title,
         mapLastUpdatedTime=list_content$component$mapLastUpdatedTime)
names(summaryDataIn) <- c('新增确诊','新增本土','新增境外','新增无症状',
      '现有确诊','现有本土','现有境外','现有无症状',
      '累计确诊','累计境外','累计治愈','累计死亡','报告名称','更新时间')

# 国内各地区疫情统计汇总
# 国内疫情list合集,需要解析
# pc_list <- list_content$component$caseList[[1]] %>% list.cbind() %>% as.data.frame()
pc_list <- list_content$component$caseList[[1]]  # 已修正

# 获取二级地区疫情函数
get_city_df <- function(i){
  if(nrow(pc_list$subList[[i]])==0){
    data.frame(city=NA,confirmedRelative=NA,confirmed=NA,crued=NA,died=NA,level=2,kname=pc_list$area[[i]])
  } else{
    pc_list$subList[[i]] %>% list.cbind() %>% as.data.frame() %>%
      select(city,confirmedRelative,confirmed,crued,died) %>%
      mutate_at(.vars = -1,as.integer) %>%
      mutate(level=2,kname=pc_list$area[[i]])
  }
}

# 一级疫情df
area_df <- pc_list %>% select(area,confirmedRelative,confirmed,crued,died) %>%
  lapply(unlist) %>% as.data.frame() %>% mutate_at(.vars = -1,as.integer) %>%
  mutate(level=1,kname=area)
# 二级疫情df
city_df <- lapply(1:nrow(area_df),get_city_df) %>% list.rbind() %>%
  rename(area=city)
# 合并
pc_df <- rbind.data.frame(area_df,city_df)
names(pc_df) <- c('地区','新增','累计','治愈','死亡','层级','地区所属')

# 新增疫情趋势
# 分省市趋势图
get_trend_area <- function(key_name){
  xt_url <- 'https://voice.baidu.com/newpneumonia/getv2?from=mola-virus&stage=publish&target='
  html_url <- str_c(xt_url,'trend&isCaseIn=1&area=',key_name)
  josn_data <- fromJSON(html_url)
  if(josn_data$status==0){
    df <- josn_data$data$trend$list[[1]]$data %>% list.cbind() %>% data.frame() %>%
      select(X5,X6) %>% rename(unOverseasInputNewAdd=X5,asymptomaticRelative=X6)
    # names(df) <- josn_data$data$trend$list[[1]]$name
    updateDate <- josn_data$data$trend$updateDate[[1]]
    area_df <- cbind(area=key_name,df,updateDate)
  }
  else {
    area_df <- data.frame(area=key_name,unOverseasInputNewAdd=NA,asymptomaticRelative=NA,updateDate=NA)
  }
  return(area_df)
}

get_trend_city <- function(key_name){
  xt_url <- 'https://voice.baidu.com/newpneumonia/getv2?from=mola-virus&stage=publish&target='
  html_url <- str_c(xt_url,'trendCity&area=',key_name)
  josn_data <- fromJSON(html_url)
  if(josn_data$status==0){
    df <- josn_data$data$trend$list[[1]]$data %>% list.cbind() %>% data.frame() %>%
      select(X1,X2) %>% rename(unOverseasInputNewAdd=X2,asymptomaticRelative=X1)
    # names(df) <- josn_data$data$trend$list[[1]]$name
    updateDate <- josn_data$data$trend$updateDate[[1]]
    area_df <- cbind(area=key_name,df,updateDate)
  }
  else {
    area_df <- data.frame(area=key_name,unOverseasInputNewAdd=NA,asymptomaticRelative=NA,updateDate=NA)
  }
  return(area_df)
}

# 例如:爬取34个省直辖市  get_trend_area('浙江')
area_name <- area_df$area
area_trend_data <- lapply(area_name,get_trend_area) %>% list.rbind() %>% data.frame()
# 例如:爬取地级市  get_trend_city('浙江-杭州')
city_name <- city_df %>% select(area,kname) %>% filter(!is.na(area)) %>%
  mutate(key_name=str_c(kname,area,sep = '-'))
area_trend_data <- lapply(city_name$key_name,get_trend_city) %>% list.rbind() %>% data.frame()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容