R语言-Kindle特价书爬榜示例 & 输出HTML小技巧(转)

发布时间:2017-2-20 9:49:56 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"R语言-Kindle特价书爬榜示例 & 输出HTML小技巧(转) ",主要涉及到R语言-Kindle特价书爬榜示例 & 输出HTML小技巧(转) 方面的内容,对于R语言-Kindle特价书爬榜示例 & 输出HTML小技巧(转) 感兴趣的同学可以参考一下。

自从买了kindle以后,总是想要定期刷有没有便宜的书,amazon经常有些1元/2元的书打特价,但是每次都去刷那些榜单太麻烦了,而且榜单又不能按照价格排名,捞书有点累

所以自己用R语言的rvest包简单写了一个小程序,让它自动按照不同价格区间把特价书给分出来。

主要看的是kindle新品排行榜和最快畅销榜。

销售爬升最快榜: http://www.amazon.cn/gp/movers-and-shakers/digital-text/

新品榜: http://www.amazon.cn/gp/new-releases/digital-text/

需要预先安装data.table / dplyr / rvest包。

代码如下

install.packages("rvest")install.packages("data.table")install.packages("dplyr")

主要分享点是:

1、Rvest的简单应用实例
2、如何把数据框(data.frame or table) 输出为html文件,即添加html脚本的方法

library(rvest)library(data.table)library(dplyr)
#这里是导入网址。研究一下amazon的顺序,直接导入就好
id<-1:5url_increase_fast<-paste0(        "http://www.amazon.cn/gp/movers-and-shakers/digital-text/ref=zg_bsms_digital-text_pg_",        id,        "?ie=UTF8&pg=",        id)url_newest<-paste0(        "http://www.amazon.cn/gp/new-releases/digital-text/ref=zg_bsnr_digital-text_pg_",        id,        "?ie=UTF8&pg=",        id)url<-c(url_increase_fast,url_newest)
#这里编写readdata函数,读取网页内容。里面有些不常用的字段,为了最后导出效果好看,我没全部都导。
#有额外需要的可以自己改编,譬如分类啊,好评率啊等等。对我来说,知道价格、书名就够了
readdata<-function(i){        web<-html(url[i],encoding="UTF-8")        title<-web %>% html_nodes("div.zg_title") %>% html_text()        title_short<-substr(title,1,20)        price<-as.numeric(gsub("","",web %>% html_nodes("div.zg_itemPriceBlock_normal strong.price") %>% html_text()))        ranking_movement<-web %>% html_nodes("span.zg_salesMovement") %>% html_text()        rank_number<-as.numeric(gsub("\\.","",web %>% html_nodes("span.zg_rankNumber") %>% html_text()))        #新书榜里没有销售变动记录,所以记为NA        if (length(ranking_movement)==0) {ranking_movement=rep(NA,20)                                          rank_number=rep(NA,20)}        link<-gsub("\\\n","",web %>% html_nodes("div.zg_title a") %>% html_attr("href"))        ASIN<-sapply(strsplit(link,split = "/dp/"),function(e)e[2])        img<-web %>% html_nodes("div.zg_itemImage_normal img")  %>% html_attr("src")        #这里加上html代码        img_link<-paste0("<img src='",img,"'>")        title_link<-paste0("<a href='",link,"'>",title_short,"</a>")        #合并数据        combine<-data.table(img_link,title_link,price,ranking_movement)        setnames(combine,c("图像","书名","价格","销售变动"))        #以防被封IP,设为5秒跑一次数据。        Sys.sleep(5)        combine}#做一个循坏开始跑数final<-data.table()for (i in 1:10){        final<-rbind(final,readdata(i))        print(i)}#这里编写一个函数,把data.table转化为html_table#要点请查看w3school,table页,以<table>开始,表头是<th>,行与行之间是<tr>#主要就是sapply, apply,paste的应用啦……就是把数据框先加<td>,再加<tr>,最后外面套一层<table>transfer_html_table<-function(rawdata){        title<-paste0("<th>",names(rawdata),"</th>")        content<-sapply(rawdata,function(e)paste0("<td>",e,"</td>"))        content<-apply(content,1,function(e) paste0(e,collapse = ""))        content<-paste0("<tr>",content,"</tr>")        bbb<-c("<table border=1><tr>",title,"</tr>",content,"</table>")        bbb}#这里应用transfer_html_table函数,把榜单输出为html表格final_less1<-transfer_html_table(rawdata=final %>% filter(价格<=1))write(final_less1,"~//Kindle-低于1元特价书.html")final_1_2<-transfer_html_table(rawdata=final %>% filter(价格>1 & 价格<=2))write(final_1_2,"~//Kindle_1-2元特价书.html")final_2_5<-transfer_html_table(rawdata=final %>% filter(价格>2 & 价格<=5))write(final_2_5,"~//Kindle_2-5元特价书.html")

最后在我的文档("~//"表示定位到我的文档那里)会找到三个HTML文件,打开来,大概长下面这个样子,于是就可以很愉悦得选书了。Kindle时不时会把一些好书1元贱卖的~~所以有了kindle经常手贱,有这个小脚本之后我觉得我会更加手贱买书了。。。

 

如果大家有兴趣,还可以去搜一下R语言批处理、自动运行等文章来看,把这个代码设为定期跑一下,然后让结果能够累计保存。那么以后就知道kindle商城在什么时候调价最多了。 amazon还是比较容易爬虫的,它html页面内代码很规范整洁,除了在产品详情页里,产品描述(product description)总是被脚本保护起来,比较难爬。

End

转自:http://mp.weixin.qq.com/s?__biz=MzA3MTM3NTA5Ng==&mid=2651055375&idx=1&sn=5c9e12352eab84012bc26cb9851a96b2&chksm=84d9c498b3ae4d8e015575ae573d13c553a33ee08403e7a86853b426d6a7b06087fb02ab1bbc&scene=0#rd

上一篇:JavaScript中reduce()方法
下一篇:hdfs 复制路径下所有文件

相关文章

相关评论