案例-抓取网页图片实现高效存图

浙江法院公开网图片抓取。图片在HTML中的地址比较好获取(定位一张图片,右键-检查元素,右侧弹出的网页结构会自动定位到该图片的地址,可以看到该图片在HTML结构中的名称标签--img,地址标签-src)

library("rvest")
library("downloader")
library("stringr")
library("dplyr")
url<-"http://www.zjsfgkw.cn/attachment/Video/VideoCover/jianxingjiashitingshengluxiang/e4224735-6d2a-4272-b623-67e291a431e2.png" #需要自行拼接
download(url,"F:/.../picture1.jpg",mode="wb")	#存储文件类型可修改

通过函数批量获取图片地址并下载图片,定位到图片存放HTML区间,进而批量获取图片地址,并传递给下载函数执行。HTML常用结构head/body/,head中存放网页标题和导航栏信息

div是HTML的分区结构,每一个分区结构都是以<div>起,</div>止,该结构本身可以层层嵌套

#需要获取的信息是图片的div分区名称信息(即div结构中的class属性或id属性)两者获取一个即可,class属性地址书写规则是div.class,ID规则是div#ID.如果class或ID中字符较长,且单词间存在空格,空格可以以.替换,若不确定定位的区间是否正确,可查看右下角的HTML路径
url<-"http://www.zjsfgkw.cn"
#html_nodes从HTML文档中选择CSS节点
link<-read_html(url) %>% html_nodes("div.courtFontTwo") %>% html_nodes("img") %>% html_attr("src")	#div分支结构png标签下的src内容-图片地址
#与原目录进行连接
link_total<-paste(url,link,sep = "")
#下载
for(i in 1:length(link_total))
{
download(link_total[i],paste("F:/.../picture",i,".jpg",sep = ""), mode = "wb")
}
#使用RCur和XML包实现-浙江法院公开网图片抓取-每个图片上附加标题名称
library("RCurl")
library("XML")
library("stringr")
library("dplyr")
url<-"http://www.zjsfgkw.cn"
#获取目标网页,注意查看网页编码(右键查看网页源代码-<meta http-equiv="content-type" content="text/html;charset=这里就是编码"/>)
rd<-getURL(url,.encoding="utf-8")
#利用xml包函数整理网页树结构
rdhtml<-htmlParse(rd,encoding="utf-8")
#获取根目录
root<-xmlRoot(rdhtml)
#获取根目录下的img标签(该标签中含有图片地址)
name1<-getNodeSet(root,"//div[@class='courtFontTwo']//img")
#利用拉lapply函数提取该属性下的title列表
name2<-lapply(name1,xmlGetAttr,name='title')
#list转向量
name2<-as.character(name2)
#字符编码转换
Encoding(name2) <- "UTF-8"
#利用拉lapply函数提取该属性下的src列表
name3<-lapply(name1,xmlGetAttr,name='src')
#list转向量
name3<-as.character(name3)
link_total<-paste(url,name3,sep = "")
for(i in 1:length(link_total)){
download.file(link_total[i],paste("F:/.../",name2[i],".jpg"
,sep = ""), mode = "wb")
}

猜你喜欢

转载自blog.csdn.net/qq_38984677/article/details/81483719