一、百度疫情指数
-
全国各城市疫情搜索高峰进度
二、爬取内容
- 如上图分城市疫情搜索高峰进度情况
三、R语言实战
# @项目名称:爬取百度疫情指数
# @项目时间:2022-12-21
# @项目作者:斑专先生
# 加载包
library(rvest)
library(dplyr)
library(jsonlite)
library(stringr)
library(rlist)
# 爬虫目标地址
bdyq_url <- 'https://motion.baidu.com/activity/yiqing_predict/main?province=%E5%85%A8%E5%9B%BD'
# 获取json字符串
list_content <- read_html(bdyq_url) %>% html_nodes('script') %>% .[9] %>% html_text2()
start_num <- str_locate(list_content,'pageInfo') %>% .[1] - 2
json_text <- list_content %>% substr(.,start_num,nchar(.)) %>% fromJSON()
# 解析到数据框
bd_df <- json_text$cardData$cards454146550$data$listData$list[[2]] %>% as.data.frame()
# 时间戳转日期
time2date <- function(x){
as.POSIXlt((x+3600*8000)/1000,origin='1970-01-01',tz='UTC') %>% as.Date()
}
# 结果集
res_df <- bd_df %>% mutate(startTime=time2date(startTime),
firstPeak =time2date(firstPeak),
firstResult =time2date(firstResult)) %>%
mutate(peakDes=ifelse(status==0,paste0('上升至',peakRate,'%'),paste0('回落至',peakRate,'%'))) %>%
select(province,city,startTime,firstPeak,firstResult,peakDes)
names(res_df) <- c('省份','城市','开始日期','搜索峰值日','高峰结束日','峰值进度')
# 导出
write.csv(res_df,'全国各城市疫情搜索高峰进度.csv',row.names=FALSE)