R语言爬虫:当当图书畅销榜(近7日)

时间:2018-10-9
爬取内容:当当图书畅销榜(近7日):书名、作者、出版社、推荐率、出版时间、价格、折扣、网址


R语言爬虫:当当图书畅销榜(近7日)

通过对其他人爬虫代码的学习,发现有相当一部分人对的代码中出现了“%>%”等内容,不知其意。无意中发现该部分内容是magrittr包的管道操作,于是对其进行了学习,并在对当当图书数据的爬取中使用了该管道操作。(参考教程:R语言中管道操作

代码所用到的函数如下:

函数 说明
read_html() 保存网页
html_nodes() 提取网页指定节点内容
html_text() 提取网页文本信息
str_match() 提取字符串中满足要求的部分
as.numeric() 将变量转为数值型
as.Date() 将变量转为日期型
data.frame() 生成数据框
html_attr() 提取网页指定属性内容

爬取第一页数据,即前20位图书的数据。
代码如下:

> library(rvest)
> library(XML)
> library(stringr)
> library(magrittr)
> url <- "http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent7-0-0-1-1"
> web <- read_html(url, encoding = "gbk")
> # 排行
> rank <- web %>% html_nodes(".list_num") %>% html_text() %>% as.numeric()
> # 书名
> title <- web %>% html_nodes(".name a") %>% html_text()
> # 作者
> writer <- web %>% html_nodes(".publisher_info a:nth-child(1)") %>% html_text()
> # 推荐率
> tuijian <- web %>% html_nodes(".tuijian") %>% html_text() %>%
+   str_match("[0-9]*") %>% as.numeric()
> # 出版日期
> date <- web %>% html_nodes(".publisher_info span") %>% html_text() %>% as.Date()
> # 价格
> price <- web %>% html_nodes("p:nth-child(1) .price_n") %>% html_text() %>%
+   str_match("[0-9]{2}.[0-9]{2}") %>% as.numeric()
> # 折扣
> discount <- web %>% html_nodes(".price_s") %>% html_text()
> # 出版社
> publication_company <- web %>% html_nodes(".publisher_info span+ a") %>% html_text()
> # 图书网址
> webpage <- web %>% html_nodes(".name a") %>% html_attr("href")
> # 生成数据框
> Data <- data.frame(rank, title, writer, publication_company, date, price, discount, tuijian, webpage)

爬取得到的数据如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/woooooood/article/details/82985245
今日推荐