千家信息网

R语言如何实现知乎live二级页面获取

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,R语言如何实现知乎live二级页面获取,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。之前曾经写过一篇关于知乎live课程信息爬取的短
千家信息网最后更新 2025年12月01日R语言如何实现知乎live二级页面获取

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安全错误 数据库的锁怎样保障安全 浙江网络安全排行 中学生网络安全技术大赛 数据库结构组织层 德温特专利数据库下载字段含义 工程网络安全会议内容包括 go语言并发写入数据库 数据库结构设计文档的目的 嘉定区机电软件开发收购价格 应用程序是如何读取数据库数据 虚拟服务器怎么相互连接 敏捷软件开发机械工业出版社 单机魔兽世界修改数据库 服务器运维和数据库运维 软件开发项目的流程 江西发展软件开发质量服务 关系型数据库的基本结构 数据库dls是什么意思 服务器1GE是什么意思 怎么远程云服务器 受托软件开发免税还是0税率 宁波华数网络技术有限公司 湖北正规软件开发服务费 使用数据库应用系统教学设计 加班管理系统数据库课程设计 sql展示数据库的代码 为什么我的节奏大师显示账号与服务器断开 高校网络安全会议 广发软件开发资深待遇 数据库表最多能包含多少条记录 网络安全法国家安全
0