抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > R语言RCurl爬虫(多线程爬虫)-高评分豆瓣图书

R语言RCurl爬虫(多线程爬虫)-高评分豆瓣图书

时间:2019-03-07 00:58:50

相关推荐

R语言爬虫-高评分图书(豆瓣)

# R语言爬虫-高评分图书(豆瓣)

本篇文章依然延续之前的爬虫类型文章,多次实操有助于对于代码的理解和技术的提升。此次爬取的是豆瓣上高评分的图书,每一次爬取都会给大家提供一份有价值、有意义的东西,每一次都有所提升,我是ERIC,希望喜欢这方面技术的或者对于发表的内容感兴趣都可以相互交流,共同提升。 (此篇爬虫数据采集后只进行了简单的可视化分析,未进行深度分析)

小编喜欢这些书籍里面最耀眼的那个书籍标签

为你,千千万万遍。

你呢?你喜欢的一本书的经典语录/标签是什么?

小编此次获取的是豆瓣里面排行前250名的书籍,可以都说是经典,虽然评分、评价略有不同,但都是值得细细品味的。

#下载包的时候注意下镜像归属,可能会导致包的下载失败、加载失败(可设置包的存储路径,否则软件默认的包存储路径为C盘,会影响你一些功能的使用)

注意了,注意了 ,从这里就开始了哈!这次用到下面这些大包小包的,想学的多查查多看看哈

install.packages("RCurl")install.packages("XML")install.packages("parallel")install.packages("stringr")install.packages("ggplot2")install.packages("dplyr")#包的加载library(parallel)library(ggplot2)

t<-0#这个你看吧不懂的话,你还是先回去看看书嘛,先用for循环写写看看

由于本次爬虫采用的是多线程计算(并行计算),所以需要构造相应的函数

#构造数据爬取函数,哦,对了,为什么要把加载包放在函数里面,这是因为后面的函数要求的,不怪我

books<-function(t){library(RCurl)library(stringr)library(XML)

#HTTP响应回传信息(响应时间、连接时间、表头或者代理服务器是否设置成功)收集,在请求网址失败时可查找相关原因

dg<-debugGatherer()

#设置header参数,伪装身份、浏览器

mheader<-c("User-Agent"="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36","Accept"="texthtml,applicationxhtml+xml,applicationxml;q=0.9,;q=0.8","Accept-Language"="en-us","Connection"="keep-alive","Accept-Charset"="GB2312,utf-8;q=0.7,;q=0.7")

#pbar<-tkProgressBar(title="进度",label="主人,我已完成%",min=0,max=100,initial=0,width=300)#这个是一个时时查看爬取进度的,小编这次没有用哈

#返回我们设置的表头headers信息,以便确认伪装是否成功

cat(dg$value()[3])

#爬取网址构造(批量爬取网页)

topurl<-"/top250?start="tcurl<-str_c(topurl,t*25,sep="")

#利用R爬虫中的RCurl包进行数据爬取,利用请求函数getURL请求网页获得网页信息

topbook<-getURL(tcurl,httpheader=mheader,debugfunction=dg$update,verbose=TRUE)

#解析网页,整理网页树结构

acbook<-htmlParse(topbook,encoding ="UTF-8")

#XML包中的xpathSApply函数数据抓取函数抓取所需要的数据,当然,首先你必须要去查阅该函数的一个用法,其次你需要去学习爬虫必备知识,HTML(超文本标记语言),至少需要了解网页的树形结构、基本的标签语法、网页中节点的相关知识。

#获取书籍的名字tname<-xpathSApply(acbook,"//*/div[@class='pl2']/a[1]",xmlValue)tfname<-str_trim(str_replace_all(tname,"[:space:]",""))#书籍别名获取#alias<-xpathSApply(acbook,"//*/div[@class='pl2']/span",xmlValue)if(length(alias)==25){alias}else{ladd<-vector(mode="character",length=25-length( alias))alias_1<-append(alias,ladd,after=length(alias))alias<- alias_1}#书籍网址获取(豆瓣)tlink<-xpathSApply(acbook,"//*/a[@class='nbg']",xmlAttrs,'href')tlink_1<-tlink[2,]

#书籍封面图片获取timg<-xpathSApply(acbook,"//*/a[@class='nbg']/img",xmlGetAttr,'src')#书籍作者获取tauthor<-xpathSApply(acbook,"//*/p[@class='pl']",xmlValue)tfauthor<-str_split_fixed(tauthor,"/",5)[,1]#书籍评论数ratnum<-xpathSApply(acbook,"//*/div[@class='star clearfix']/span[@class='pl']",xmlValue)fratnum<-str_trim(str_replace_all(str_split_fixed(ratnum," ",4)[,4],"[:punct:]",""))#书籍豆瓣评分ratg<-xpathSApply(acbook,"//*/div[@class='star clearfix']/span[@class='rating_nums']",xmlValue)tag<-xpathSApply(acbook,"//*/p[@class='quote']/span[@class='inq']",xmlValue)if(length(tag)==25){tag}else{addnum<-vector(mode="character",length=25-length(tag))tag_1<-append(tag,addnum,after=length(tag))tag<-tag_1}#合并数据data.frame(tfname,tfauthor,tag,ratg,fratnum,tlink_1,timg)#Sys.sleep(2) (访问时间长、频次高时要加入系统休眠间隔,不然很容易被封)}

#多线程计算(并行计算),利用parallel中的parLapply函数,该函数前身为Lapply,多线程计算首先要看看你的电脑是多少核的,采用适当的线程计算,过多过少都不合适,影响计算效率,一般非程序员、大数据处理的,电脑都是4核。

另外,本文之所以采用多线程很明显提升了计算效率,采用for或者foreach循环效率是非常低的,小编在之前已经尝试过很多次了,而现在的这个时间大幅降低。当然parapllel包的并行计算效率不算是比较高的,也还有其他的包SupR、H2O、Rmpi等

这个时间可以说相对来说很短了,小编的电脑是4核的,之前用for循环运行的时候就不说了,苦不堪言,特别是在之前几万的数据量时。

m<-0:9

#可得出计算耗费时间

system.time({m<-0:9cl<-makeCluster(4) # 初始化四核心集群bdata<-parLapply(cl,m,tbook)res.df <-do.call('rbind',bdata)#记得关闭集群stopCluster(cl)})

#作者出版书籍数量分析ratio<-(author_num$Freq/250)*100author_num<-data.frame(id,table(res.df$tfauthor),ratio)id<-1:27#绘图id<-1:179authorsat<-data.frame(table(bookdata$tfauthor))ratio<-((authorsat$Freq)/250)*100authorsat<-data.frame(id,authorsat,ratio)

#运用dplyr中的arrange函数对其进行排序

asort<-arrange(authorsat,desc(Freq))

#此处需要用到ggplot2包中的函数,想要学好ggplot函数需要花大量功夫,基础的画图需求,可自行查阅资料

出版书籍排名前20的作者图,其中村上春树出版的书籍最多,也从中看出他的书籍是十分受读者喜爱的,同时也是特别有影响力的人、有价值的书籍,小编也推荐大家去读读他的书,升华下自我,哈哈哈哈哈,实在看不下去不勉强哈,莫搞得打瞌睡不好的,小编推荐他的

《追风筝的人》

ggplot(authorsat[1:20,], aes(x=Var1,y=Freq,fill=Var1))+geom_bar(stat="identity",aes(reorder(Var1,-Freq)))+labs(title = "作者书籍数量分布")+xlab("") + ylab("")+theme(panel.background=element_rect(fill='transparent',color ="gray"),axis.text.x = element_text(angle = 70, hjust = 0.5,vjust = 0.5,color = "black",size=9),plot.title = element_text(hjust = 0.5))+geom_text(mapping = aes(label=Freq),size=3,vjust=0.8)

ggplot(data=pingfen, aes(x=level,y=ratgrade))+geom_boxplot(aes(fill=level))p+xlab("图书评分等级:s1(8-8.5);s2(8.5-9);s3(9+)") + ylab("图书评分")+labs(title="图书评分分布(不同评分段)")+ theme(plot.title = element_text(hjust = 0.5))

大部分书籍评分都在8.5~9.0,评分9.0以上的书籍比较少,但是也是精华中的精华啊,值得瞅一瞅

此处放出部分图书的信息,喜欢的修行人可联系小编获取此文章爬取的书籍信息

下载的部分书籍封面图片

联系小编哦

若有需要豆瓣图书TOP250名单,可关注博主个人公众号

奉节脐橙性凉,味甘酸,归肺、脾、胃经;具有生津开胃、止呕、清肠、保护血管的功效。

奉节脐橙中富含维C和维P以及胡萝卜素,可以抑制致癌物质的形成,还能软化和保护血管,促进血液循环,降低胆固醇和血脂;维生素P可以有效防止维C被破坏。盐蒸橙子是化痰止咳良药。橙皮里有两种成分具有止咳化痰的功效,一个是那可汀,一个是橙皮油。这两种成分,只有在蒸煮之后才会从橙皮中出来,所以咳嗽有痰的时候,不妨蒸个橙子试试

/?userid=1267683370

如果觉得《R语言RCurl爬虫(多线程爬虫)-高评分豆瓣图书》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。