楼主: sswangjy
4013 4

[程序分享] Kindle电子书排行榜爬虫实践 [推广有奖]

  • 5关注
  • 1粉丝

已卖:6份资源

硕士生

58%

还不是VIP/贵宾

-

威望
0
论坛币
2246 个
通用积分
137.8650
学术水平
3 点
热心指数
9 点
信用等级
4 点
经验
4051 点
帖子
75
精华
0
在线时间
281 小时
注册时间
2015-3-27
最后登录
2021-2-5

楼主
sswangjy 发表于 2016-3-11 20:50:18 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
      最近学习R语言爬虫,通过一个博客上相关代码的学习进行联系,博客链接:http://supstat.com.cn/blog/2015/03/31/amazon-kindle/        源代码只抓取了收费电子书的排行榜,如存在缺失平均分的条目则会导致错位,同时还存在其他的一些问题,在学习过程中,对代码进行了改进,和大家分享下~

首先是涉及的包:
library(xlsxjars)
library(rJava)
library(xlsx)
library(XML)

URL <- paste0("http://www.amazon.cn/gp/bestsellers/digital-text/116169071/ref=zg_bs_116169071_pg_",1:5,
              "?ie=UTF8&pg=",1:5,"&ajax=",1:5)
URL[1] <- "http://www.amazon.cn/gp/bestsellers/digital-text/116169071/ref=sa_menu_kindle_l3_116169071#1"


#############################################################################
URL[1]更换是因为,第一页的时候如果和其他页结构一样,只能抓取到六条数据;另外如果采用
URL <- paste0("http://www.amazon.cn/gp/bestsellers/digital-text/116169071/ref=sa_menu_kindle_l3_116169071#",1:5)
则只能抓取5次第一页的数据,大家可以注意下,如果在网页输入
http://www.amazon.cn/gp/bestsellers/digital-text/116169071/ref=sa_menu_kindle_l3_116169071#2,亚马逊是先跳到第一页,然后才转接到第二页的。
############################################################################


##################抓取信息相关函数准备###########################################

#抓取序号
giveRanks = function(rootNode){
  ranks <- xpathSApply(rootNode,"//span[@class='zg_rankNumber']",xmlValue)
  ranks <- as.numeric(sub("\\.","",ranks))
  return(ranks)
}

#抓取书名
giveNames = function(rootNode){
  names <- xpathSApply(rootNode,"//div[@class='zg_title']",xmlValue)
  return(names)
}

#抓取作者
giveAuthors = function(rootNode){
  authors <- xpathSApply(rootNode,"//div[@class='zg_byline']",xmlValue)
  authors <- sub("\n\n\n\n\n\n\n~ ","",authors) #去掉不需要的部分
  return(authors)
}

#抓取平均分并处理为数值形式,
giveRate = function(rootNode){
  rate <- xpathSApply(rootNode,"//div[@class='zg_reviews']",xmlValue)
  rate1 <- strsplit(rate,"平均")
  rate1 <- sapply(rate1, function(v) return(v[2]))
  rate1 <- substr(rate1,1,3)
  rate <- as.numeric(rate1)
  return(rate)
}

#抓取参评人数
giveNumber = function(rootNode){
  number <- xpathSApply(rootNode,"//div[@class='zg_reviews']",xmlValue)
  number1 <- strsplit(number,"\\(")
  #上述语句提取信息较多,考虑到数字两侧有括号,取左侧括号作为分隔符拆分为两列,再取第二列处理
  number1 <- sapply(number1, function(v) return(v[2]))
  number1 <- sub(")\n  \n\n\n\n\n\n\n\n\n\n\n\n","",number1)
  number1 <- sub(",","",number1) #去掉数字中的“,”,方可转化为数字
  number <- as.numeric(number1)
  return(number)
}

#平均分与参评人数是通过抓取整条数据再拆分的方式进行,从而可以识别出没有评分的书籍

#抓取价格
givePrice = function(rootNode){
  price <- xpathSApply(rootNode,"//strong[@class='price']",xmlValue)
  price <- as.numeric(sub("免费","0",sub("¥ ","",price)))[1:40]
  price
}

##############################################################################

#抓取信息用的是xpath的相关语法,大家可以通过网址:http://www.w3school.com.cn/xpath/xpath_syntax.asp 进一步学习其他的语法。
##############################################################################

# 抓取全部信息并汇总成数据表
getAmazonBy1 = function(URL){
  Sys.sleep(runif(1,1,2))
  doc <- htmlParse(URL,encoding="UTF-8")
  rootNode <- xmlRoot(doc)
  Ranks <- giveRanks(rootNode)
  Name <- giveNames(rootNode)
  Author <- giveAuthors(rootNode)
  Price <- givePrice(rootNode)
  Rate <- giveRate(rootNode)
  Number <- giveNumber(rootNode)
  data <- data.frame(Ranks,Name,Author,Price,Rate,Number)
  return(data)
}


####################主程序##########################################
mainfunction = function(URL){
  data <- rbind(
    getAmazonBy1(URL[1]),
    getAmazonBy1(URL[2]),
    getAmazonBy1(URL[3]),
    getAmazonBy1(URL[4]),
    getAmazonBy1(URL[5]))
  return(data)
}


##############################################################################
data <- mainfunction(URL)
write.xlsx(data,"f:/bookrank.xlsx")


附件是代码和今天刚跑出的数据,和大家分享下



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Kindle kind 电子书 IND 排行榜 爬虫

bookrank.xlsx
下载链接: https://bbs.pinggu.org/a-1989267.html

18.23 KB

3.11跑出的数据

kindle排行榜.txt

2.69 KB

代码

http://studynotes0fjz.blog.163.com/

沙发
yylxy999 发表于 2016-3-11 21:31:27
大神,,果断收藏~

藤椅
橴玥々儛樰 发表于 2016-3-11 21:39:55
顶顶顶~~~

板凳
cheetahfly 在职认证  发表于 2016-3-11 22:33:10
[em17]

报纸
waterhorse 发表于 2016-3-14 00:15:56
DING, XIE XIE.

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 12:11