20170209更新:

根据回复提示,rvest包更新,原用函数html作废,需改用read_html

并后续amazon网页改版等

因此此文章代码失效!各位可看评论内容了解详情

等以后有空再重写一遍代码,抱歉。果然代码还是放在github上好啊。。。。

----------------------------------

博客总目录:http://www.cnblogs.com/weibaar/p/4507801.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/

不在博客园上阅读时才会看到的,这篇博文归http://www.cnblogs.com/weibaar 所有

仅保证在博客园博客上的排版干净利索还有代码块与图片正确显示,他站请保留作者信息尊重版权啊

需要预先安装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:5
url_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)总是被脚本保护起来,比较难爬。

不在博客园上阅读时才会看到的,这篇博文归http://www.cnblogs.com/weibaar 所有

仅保证在博客园博客上的排版干净利索还有代码块与图片正确显示,他站请保留作者信息尊重版权啊

以及最近开始学python了!

大牛分享了一个很好用的python IDE,叫做ANACONDA,里面那个spyder的IDE真的做的很棒~~跟rstudio有的一拼~ 而且ANACONDA集成了python 2.7,都不用单独下python了~~

然后github上有两个教程写的还蛮不错的

1、 python入门

https://github.com/qiwsir/StarterLearningPython

2、python爬虫101个示例(基于python 3)

https://github.com/compjour/search-script-scrape

R语言-Kindle特价书爬榜示例 & 输出HTML小技巧的更多相关文章

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

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

  2. 【Scrapy(四)】scrapy 分页爬取以及xapth使用小技巧

    scrapy 分页爬取以及xapth使用小技巧 这里以爬取www.javaquan.com为例: 1.构建出下一页的url: 很显然通过dom树,可以发现下一页所在的a标签   2.使用scrapy的 ...

  3. R语言进行文件夹操作示例(转)

    rm(list=ls())path = 'J:/lab/EX29 --在R语言中进行文件(夹)操作'setwd(path)cat("file A\n", file="A& ...

  4. 【R语言系列】作图入门示例一

    假设有如下数据,我们使用plot函数作图 月龄 体重 月龄 体重  1 4.4 9 7.3 3 5.3 3 6.0 5 7.2 9 10.4 2 5.2 12 10.2 11 8.5 3 6.1 R语 ...

  5. R语言爬虫:爬取百度百科词条

    抓取目标:抓取花儿与少年的百度百科中成员信息 url <- "http://baike.baidu.com/item/%E8%8A%B1%E5%84%BF%E4%B8%8E%E5%B0 ...

  6. R语言爬虫:爬取包含所有R包的名称及介绍

    第一种方法 library("rvest") page <- read_html("https://cran.rstudio.com/web/packages/av ...

  7. R语言重要数据集分析研究——  数据集本身的分析技巧

    数据集本身的分析技巧           作者:王立敏           文章来源:网络 1.数据集 数据集,又称为资料集.数据集合或资料集合,是一种由数据所组成的集合. Data set(或dat ...

  8. windows核心编程 第5章job lab示例程序 解决小技巧

    看到windows核心编程 第5章的最后一节,发现job lab例子程序不能在我的系统(win8下)正常运行,总是提示“进程在一个作业里”         用process explorer程序查看 ...

  9. R语言:用简单的文本处理方法优化我们的读书体验

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html 前言 延续之前的用R语言读琅琊榜小说,继续讲一下利用R语言做一些简单的文本处理.分词的事情.其实 ...

随机推荐

  1. cefsharp重写默认js弹窗(alert/confirm/prompt)

    1.设置js弹窗控制器 webView.JsDialogHandler = this;  //js弹窗控制 this表示本类对象,所以本类要实现IJsDialogHandler接口 2.实现IJsDi ...

  2. CODEVS3037 线段覆盖 5[序列DP 二分]

    3037 线段覆盖 5   时间限制: 3 s   空间限制: 256000 KB   题目等级 : 钻石 Diamond 题解       题目描述 Description 数轴上有n条线段,线段的 ...

  3. java1.8函数式编程概念

    有关函数式编程 ·1 函数作为一等公民 特点:将函数作为参数传递给另外一个函数:函数可以作为另外一个函数的返回值 ·2 无副作用 函数的副作用指的是函数在调用过程中,除了给出了返回值外,还修改了函数外 ...

  4. web前端开发最佳实践笔记

    一.文章开篇 由于最近也比较忙,一方面是忙着公司的事情,另外一方面也是忙着看书和学习,所以没有时间来和大家一起分享知识,现在好了,终于回归博客园的大家庭了,今天我打算来分享一下关于<web前端开 ...

  5. 【强烈推荐】数据库迁移利器:Migrator.Net

    简介 很郁闷,写了一天的遇到LiveWriter错误,可恶啊 几年前在做项目中第一次接触到了Migrator.Net,就深深被吸引住了,至此以后在新的大项目中,我都会使用Migrator.Net来创建 ...

  6. yii获取当前url和域名

    <?php //当前域名 echo Yii::app()->request->hostInfo; //除域名外的URL echo Yii::app()->request-> ...

  7. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  8. python设计模式

    本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复 ...

  9. mac下需要安装旧 Java SE 6 才能打开程序解决办法

    今天我在mac系统下面安装myeclipse2014(myeclipse-pro-2014-GA-offline-installer-macosx.dmg)的时候,发现显示错误: 您需要安装旧 Jav ...

  10. 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...