R语言如何实现知乎live二级页面获取
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,R语言如何实现知乎live二级页面获取,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前曾经写过一篇关于知乎live课程信息爬取的短
千家信息网最后更新 2026年10月31日R语言如何实现知乎live二级页面获取将最终返回数据存入mongodb
R语言如何实现知乎live二级页面获取,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
之前曾经写过一篇关于知乎live课程信息爬取的短文,那个直接遍历的知乎live主页上展示的部分课程,仅仅是很小的一部分。
今日这一篇将是该小项目的升级版,直接对live主页的课程按照模块进行二级页面的遍历,这样可以抓取更加丰富的课程信息,本次一共获取课程数目将近800+
对于课程页抓包分析详情,这里不再赘述,想要了解的可以看这一篇旧文,本篇内容仅对二级页面的遍历思路进行整理。
知乎live课程数据爬取实战
因为课程数相对较多,这里使用cookie直接登录,需要获取cookie值。
library("httr") library("jsonlite")
library("httr")
library("magrittr")
library("plyr")
library("rlist")一级页面遍历,获取各个模块课程主题信息以及其中的课程id值。
按照以往的抓包流程,一级课程模块的抓取函数如下:
mylive <- function(){ baseurl<-"https://api.zhihu.com/lives/special_lists" header <- c(
'Content-Type'='application/json; charset=utf-8',
'User-Agent'='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36',
'Referer'='https://www.zhihu.com/lives/specials',
'Cookie' = "请copy自己浏览器中知乎网页cookie" ) payload<-list(
'limit'=10,
'offset'=0,
'subtype'='special_list' ) i = 0 myresult <- data.frame()
while (TRUE){
###每次请求offset值偏移10个单位 payload['offset'] = payload[['offset']] %>% `+`(10*i)
tryCatch({ r <- GET(baseurl,add_headers(.headers =header),query =payload, encode="json") myresult <-r %>% content(as="text") %>% fromJSON(flatten = TRUE) %>% `[[`(3) %>% rbind(myresult,.) cat(sprintf("正在处理第【%d】页!",i),sep = "\n") },error = function(e){ cat(sprintf("第【%d】页抓取失败!",i),sep = "\n") })
###通过抓包返回值中的状态信息确定是否应该跳出循环 if ( r %>% content(as="text") %>% fromJSON(flatten = TRUE) %>% `[[`(2) %>% `[[`(1) == TRUE) break Sys.sleep(runif(1,0.5,1.5)) i = i +1 } cat("all page is OK!!!",sep = "\n")
return (myresult) }执行代码
system.time( myresult <- mylive() )
以上我抓到了一级课程模块的信息,其中就含有所有课程的id值,我们获取到id值之后,使用id值来遍历每一个课程模块(id值)下的子课程信息。
过程与上述一级页面的遍历过程基本一致。
定义一个子页面遍历函数,每输入一个id值,该函数即可通过内置的逻辑函数自动判断该模块下是否遍历到尽头,如果子页面遍历完了,则跳出循环,并返回所有课程数据,否则继续。
outdata <- function(id){ baseurl<-sprintf("https://api.zhihu.com/lives/special_lists/%s/lives",id) header <- c(
'Content-Type'='application/json; charset=utf-8',
'User-Agent'='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36',
'Referer'=sprintf('https://www.zhihu.com/lives/specials/%s',id),
'Cookie' = Cookie ) payload<-list(
'limit'=10,
'offset'=0,
'subtype'='special_list' ) myresult <- data.frame() i = 0 while (TRUE){ payload['offset'] = payload[['offset']] %>% `+`(10*i)
tryCatch({ r <- GET(baseurl,add_headers(.headers =header),query =payload, encode="json") myresult <-r %>% content(as="text") %>% fromJSON(flatten = TRUE) %>% `[[`(3) %>% rbind(myresult,.) })
if ( r %>% content(as="text") %>% fromJSON(flatten = TRUE) %>% `[[`(2) %>% `[[`(1) == TRUE) break Sys.sleep(runif(1,0.5,1.5)) i = i +1 }
return (myresult) }使用一个循环来执行以上子页面遍历函数。
fulloutdata <- function(){ mydatafull <- data.frame() i = 1 for (id in ids){
tryCatch({ mydatafull <- outdata(id) %>% rbind(mydatafull,.) cat(sprintf("正在处理任务【%s】",id),sep = "\n") Sys.sleep(runif(1,0.5,1.5)) },error = function(e){ cat(sprintf("任务【%s】处理失败!",i),sep = "\n") i = i +1 }) } cat("have done!",sep = "\n") cat(sprintf("一共有【i】个任务处理失败!",i),sep = "\n")
return(mydatafull) }执行二级页面遍历函数
system.time(mydatalast <- fulloutdata())
将最终返回数据存入mongodb
library("rmongodb")mongo <- mongo.create(host = "localhost")bson <- mongo.bson.from.list(mydatalast)mongo.insert(mongo,"rmongo_test.",mydatalast)list.save(mydatalast,"D:/R/File/liveinfo.json")关于R语言如何实现知乎live二级页面获取问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
课程
页面
信息
函数
模块
处理
任务
数据
问题
循环
语言
主页
内容
更多
正在
过程
分析
帮助
解答
易行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
耶加雪菲
广州为想互联网科技有限公司
互联网科技官网
深圳科技互联网
北京互联网科技
科技服务与互联网
互联网 科技创新
广州互联网络科技有限公司
互联网科技论坛
互联网科技英文翻译
汉立互联网科技有限公司联系电话
农村开互联网科技讲堂
互联网科技和信息
群盈汇互联网科技有限公司
区块链结合互联网科技
雨阳互联网卡科技有限公司
上海乐五互联网科技有限公司
版纳互联网科技选哪家
米泉互联网科技专业怎么样
互联网金融金融科技
美国互联网保险保险科技
深圳互联网科技公司
高科技与互联网
互联网金融公司科技
美国互联网科技
长亮科技 互联网金融
上海亿帐通互联网科技
科技大学互联网专业好不好
互联网科技公司有风险吗
滨湖区互联网智能科技产品有哪些