R语言-Kindle特价书爬榜示例 & 输出HTML小技巧
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小技巧的更多相关文章
- R语言-Kindle特价书爬榜示例 & 输出HTML小技巧(转)
自从买了kindle以后,总是想要定期刷有没有便宜的书,amazon经常有些1元/2元的书打特价,但是每次都去刷那些榜单太麻烦了,而且榜单又不能按照价格排名,捞书有点累 所以自己用R语言的rvest包 ...
- 【Scrapy(四)】scrapy 分页爬取以及xapth使用小技巧
scrapy 分页爬取以及xapth使用小技巧 这里以爬取www.javaquan.com为例: 1.构建出下一页的url: 很显然通过dom树,可以发现下一页所在的a标签 2.使用scrapy的 ...
- R语言进行文件夹操作示例(转)
rm(list=ls())path = 'J:/lab/EX29 --在R语言中进行文件(夹)操作'setwd(path)cat("file A\n", file="A& ...
- 【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语 ...
- R语言爬虫:爬取百度百科词条
抓取目标:抓取花儿与少年的百度百科中成员信息 url <- "http://baike.baidu.com/item/%E8%8A%B1%E5%84%BF%E4%B8%8E%E5%B0 ...
- R语言爬虫:爬取包含所有R包的名称及介绍
第一种方法 library("rvest") page <- read_html("https://cran.rstudio.com/web/packages/av ...
- R语言重要数据集分析研究—— 数据集本身的分析技巧
数据集本身的分析技巧 作者:王立敏 文章来源:网络 1.数据集 数据集,又称为资料集.数据集合或资料集合,是一种由数据所组成的集合. Data set(或dat ...
- windows核心编程 第5章job lab示例程序 解决小技巧
看到windows核心编程 第5章的最后一节,发现job lab例子程序不能在我的系统(win8下)正常运行,总是提示“进程在一个作业里” 用process explorer程序查看 ...
- R语言:用简单的文本处理方法优化我们的读书体验
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html 前言 延续之前的用R语言读琅琊榜小说,继续讲一下利用R语言做一些简单的文本处理.分词的事情.其实 ...
随机推荐
- python利用unrar实现rar文件解压缩
python第三方包unrar可以实现rar文件的解压缩,它以动态库UnRAR为基础,封装而成 1. 下载UnRAR动态库 https://pypi.python.org/pypi/unrar/0.2 ...
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
- 06章 映射一对多双向关联关系、以及cascade、inverse属性
当类与类之间建立了关联,就可以方便的从一个对象导航到另一个对象.或者通过集合导航到一组对象.例如: 对于给定的Emp对象,如果想获得与它关联的Dept对象,只要调用如下方法 Dept dept=emp ...
- u3d_Shader_effects笔记6 第四章 使用cubeMap简单的反射读取
一:前面心情: 1.今天开了个小会,该看的继续要看,不要堕落. 2.还有就是丽的生活习惯不太好.慢慢改变. 3.哎,公司人员争夺吗?哎,不知道,不了解,不去想,提升自己,内心明净 二.主要内容和参考 ...
- one to many
@OneToMany(mappedBy="order",fetch=FetchType.EAGER,cascade={CascadeType.ALL}) private Li ...
- java多线程系类:JUC线程池:01之线程池架构
概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容--线程池.内容包括:线程池架构 ...
- node基础10:处理异常
1.处理异常 当发生异常时,如果不作处理,那么服务器会奔溃.由于node的异步调用的特性,所以不但要考虑主程序的异常,还有处理异步调用的异常. 代码如下: /** * server.js */ var ...
- Multiple Contexts have a path of 错误
1.问题描述 在eclipse里面启动tomcat的时候,看到报错,multiple contexts have a path.tomcat启动失败 2.解决办法 删除tomcat,重新加载部署tom ...
- 开源任务管理平台TaskManager介绍
很早之前准备写Quartz系列文章,现在终于能够实现了.从本篇开始将带你实现一款自己的任务管理平台.在工作中你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一 ...
- 【原】浅谈KL散度(相对熵)在用户画像中的应用
最近做用户画像,用到了KL散度,发现效果还是不错的,现跟大家分享一下,为了文章的易读性,不具体讲公式的计算,主要讲应用,不过公式也不复杂,具体可以看链接. 首先先介绍一下KL散度是啥.KL散度全称Ku ...