时间: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)
爬取得到的数据如下:
|
请发表评论