现在很多网页都采用AJAX这种异步加载的网页结构,简单的页面爬取不了这些数据。如http://book.qidian.com/info/1003354631,里面的评分信息,
我们在浏览器看到的评分和评价人数是加载后的信息;查看源代码的话,会发现是没有数据的
实际情况是否如此呢?我们开始试试是抓到的是8.7分,还是0.0分,首先常规直接抓取
library(XML)
library(RCurl)
library(rvest)
URL="http://book.qidian.com/info/1003354631"
doc<-htmlParse(URL,encoding="UTF-8")
rootNode<-xmlRoot(doc)
book_name<-xpathSApply(rootNode,"//div[@class='book-information cf']/div/h1/em",xmlValue)#书名
author<-xpathSApply(rootNode,"//div[@class='book-information cf']/div/h1/span/a",xmlValue)#作者
scores=xpathSApply(rootNode,"//div[@class='book-information cf']/div/div/div/h4",xmlValue)#评分
votes=xpathSApply(rootNode,"//p[@id='j_userCount']/span",xmlValue)#评价人数
book_name
#一念永恒
author
#耳根
scores
#0.0
这个时候就需要我们用到模拟浏览器抓取的包RSelenium包或者Rwebdriver。
下载地址:http://www.Java.com/en/download/manual.jsp#win
配置jre环境变量这个也一堆资料,自己上网搜索哈(https://jingyan.baidu.com/article/09ea3ede2b5f86c0aede39b9.html)
下载selenium,并放至指定位置下载地址:
http://www.seleniumhq.org/download/
启动selenium打开命令提示符进入selenium所在路径
输入java -jar selenium-server-standalone-3.4.0.jar
启动selenium,
【注意】最好将相应浏览器的驱动也下载好,在selenium下载页面的“Third Party Drivers, Bindings, and Plugins”,下载相应的驱动,建议直接放到相应浏览器的安装文件地址,并且配好环境变量(将浏览器安装地址添加到环境变量上)即可。如果你浏览器已经有了驱动也就不需要这一步了,我自己的是需要的。
R安装包
library(devtools)#如果没有安装要下载安装
install_github(repo = "Rwebdriver", username = "crubba")
library(XML)
library(RCurl)
library(rvest)
library(Rwebdriver)
URL="http://book.qidian.com/info/1003354631"
start_session(root = "http://localhost:4444/wd/hub/", browser ="firefox")#启动浏览器
post.url(url=URL)#用浏览器打开网址
pageSource <- page_source() #存储浏览器的信息
#后面都跟常规爬取一样
doc<-htmlParse(pageSource,encoding="UTF-8")
rootNode<-xmlRoot(doc)
book_name<-xpathSApply(rootNode,"//div[@class='book-information cf']/div/h1/em",xmlValue)#书名
author<-xpathSApply(rootNode,"//div[@class='book-information cf']/div/h1/span/a",xmlValue)
status<-xpathSApply(rootNode,"//div[@class='book-information cf']/div/p[1]/span[1]",xmlValue)#只取第一个,看是否完结
types<-xpathSApply(rootNode,"//div[@class='book-information cf']/div/p[1]/a[1]",xmlValue)#只取第一个,看什么类型小说
words=xpathSApply(rootNode,"//div[@class='book-information cf']/div/p[3]/em[1]",xmlValue)#看多少万字
cliks=xpathSApply(rootNode,"//div[@class='book-information cf']/div/p[3]/em[2]",xmlValue)#看多少万点击
reoms=xpathSApply(rootNode,"//div[@class='book-information cf']/div/p[3]/em[3]",xmlValue)#看多少万推荐
scores=xpathSApply(rootNode,"//div[@class='book-information cf']/div/div/div/h4",xmlValue)#看评分
votes=xpathSApply(rootNode,"//p[@id='j_userCount']/span",xmlValue)#看平均人数
quit_session()
score
#8.7
votes
#1203
结果一切ok!!!