欢迎访问我的独立网站:www.datafxs.xyz
以前就很喜欢爬虫,一段代码可以去搜集网络上的资源,总觉得是很厉害的事情,因为专业的原因,自身比较熟练R语言,但是Python并不熟悉,所以便查找了网上关于R语言爬虫的文章,在此做一个总结。以便自己随时复习。
首先,提到R语言爬虫,不得不提到两大利器RCurl和XML包,通过这两个包会发现爬虫怎么那么容易 哈,本文不会讲原理乱七八糟的,而是最实用的的函数和方法,你只需要会R最基本的操作,就能阅读本文的内容。
首先安装这两个函数包并加载
install.packages("RCurl")
install.packages("XML")
library(RCurl)
library(XML)
本文将对半次元的网站http://bcy.net/coser/detail/48126/1026772进行萌妹子图片的爬取
首先,需要把网页爬下来,这一点就需要用到一个利器,getURL(url)函数,url便是你要爬去的网站的网址,直接百度复制就好了(如果你要爬多个网址,研究一下url写个循环就可以啦)
url
web
接下来要对爬取得网页进行处理,生成标准的HTML树形结构,方便利用XML里面的函数进行处理
doc
接下来就是最重点的部分了,节点定位,此时建议去你需要读取的网页,浏览器右键读取源代码,找到我们需要的资源所在的标签如下。
阿爸~阿妈~快把小蝴蝶带回家啊~
src='http://img9.bcyimg.com/coser/48126/post/178ff/f02fa320e7a611e681bd5963573b9ea2.jpg/w650' />
/c0ac17f0e7a611e681bd5963573b9ea2.jpg/w650' />
'http://img9.bcyimg.com/coser/48126/post/178ff/f2d8f130e7a611e681bd5963573b9ea2.jpg/w650' />
>
1c450e7a611e681bd5963573b9ea2.jpg/w650' />
p://img9.bcyimg.com/coser/48126/post/178ff/c8dddf30e7a611e681bd5963573b9ea2.jpg/w650' />
g class='detail_std detail_clickable' src='http://img9.bcyimg.com/coser/48126/post/178ff/9f10e21
0e7a611e681bd5963573b9ea2.jpg/w650' />
img9.bcyimg.com/coser/48126/post/178ff/b435a220e7a611e681bd5963573b9ea2.jpg/w650' />
ass='detail_std detail_clickable' src='http://img9.bcyimg.com/coser/48126/post/178ff/d3452410e7a
611e681bd5963573b9ea2.jpg/w650' />
.bcyimg.com/coser/48126/post/178ff/eb17ed20e7a611e681bd5963573b9ea2.jpg/w650' />
'detail_std detail_clickable' src='http://img9.bcyimg.com/coser/48126/post/178ff/a8efe420e7a611e
681bd5963573b9ea2.jpg/w650' />
们想提取,首先定位到标签
div[@class='post__content js-content-img-wrap js-fullimg js-maincontent mb20']/img 如果想提取标签里面的文本使用text()
div[@class='post__content js-content-img-wrap js-fullimg js-maincontent mb20']/text() 定位到标签
node
info=sapply(node,xmlGetAttr,"src") 在此加上常用的函数,提取数据会变得异常容易
xmlName() :节点的名字
xmlSize() :字节点的个数
xmlAttrs() :命名所有属性的特征向量
xmlGetAttr(name):获得属性name的值
xmlValue():提取属性所对应的值
xmlParent():叶节点的内容
xmlAncestors():父节点的名字
getSibling():向左向右的姐弟间的值 通过循环将读取的图片url下载进本地
x
for(inf in info){
y
tryCatch({ #tryCatch()异常处理,若下载图片失败,跳过执行下一次循环
download.file(inf,y,mode="wb") #下载函数,根据图片url下载文件
x
cat("ERROR:",conditionMessage(e),"\n")
}
)
}
至此快去看看你的image1文件夹,萌妹子正在里面等你哦!
附上对于半次元角色-西木野真姬的排行榜的所有cos娘图片的爬取代码
library(RCurl)
library(XML)
myHttpheader
"Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language"="en-us",
"Connection"="keep-alive",
"Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7")
url
web
doc
node
info=sapply(node,xmlGetAttr,"href")
x="http://bcy.net"
info1
x
for(urlweb in info1){
print("urlweb")
web1
doc1
node1
info2=sapply(node1,xmlGetAttr,"src")
for(inf in info2){
y
tryCatch({
download.file(inf,y,mode="wb")
x
cat("ERROR:",conditionMessage(e),"\n")
}
)
}
}