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

版权声明:欢迎分享/转载,但要注明出处哦,世界有你更美;未经允许,禁止用于商业行为。 https://blog.csdn.net/LEEBELOVED/article/details/83790006

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<-"https://book.douban.com/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:9
  cl<-makeCluster(4) # 初始化四核心集群
  bdata<-parLapply(cl,m,tbook) 
  res.df <-do.call('rbind',bdata) 

# 记得关闭集群
  stopCluster(cl)
})
#作者出版书籍数量分析
ratio<-(author_num$Freq/250)*100
author_num<-data.frame(id,table(res.df$tfauthor),ratio)
id<-1:27

#绘图id<-1:179
authorsat<-data.frame(table(bookdata$tfauthor))
ratio<-((authorsat$Freq)/250)*100
authorsat<-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以上的书籍比较少,但是也是精华中的精华啊,值得瞅一瞅

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

下载的部分书籍封面图片

         

联系小编哦

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

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

https://weidian.com/?userid=1267683370

猜你喜欢

转载自blog.csdn.net/LEEBELOVED/article/details/83790006