R语言中curlUnescape_R语言爬虫-RCurl和XML学习笔记

欢迎访问我的独立网站: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' /> 

      定位到源码里面我们需要的那部分,如上,包含了网页我们需要的图片的url,我们的目的就是把它提取出来,网页每一个标签都是以开始,以作为结尾的,而我

们想提取,首先定位到标签

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()     定位到标签

里面的 ,然后通过getNodeSet函数将定位到的资源提取出来。

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")

}

)

}

}

你可能感兴趣的:(R语言中curlUnescape_R语言爬虫-RCurl和XML学习笔记)