本来今天要跟大家分享怎么批量爬取2016年各大上市公司年报的,可是代码刚写了开头,就发现年报这玩意儿,真的不太好爬,还以为自己写的姿势不对,换了好几个网站。
眼睁睁的开着网页源码里排的整整齐齐的pdf文档,可是就是爬不到,NND,还是火候不够,本来打算放弃的,可是想着不干点什么太没成就感了,就跑去知乎爬了人家几张图。
之前分享过知乎爬图的代码,当时利用的Rvest爬的,今天换RCurl+XML包来爬,也算是新知识点了。
因为害怕爬太多,会被禁IP,毕竟知乎每天必看的,被禁了那就不好了,特意选了个图片不多的摄影外拍的帖子。
https://www.zhihu.com/question/31785374/answer/150310292
代码一共没几行,很好理解,可以作为学习的案例:
#加载包:
library("RCurl") library(XML) library(stringr) library(dplyr) library(plyr)
爬取过程:
url<-"https://www.zhihu.com/question/31785374/answer/150310292" #获取目标网页(注意查看网页编码) rd <-getURL(url,.encoding="UTF-8") #利用xml包函数整理网页树结构 rdhtml <- htmlParse(rd,encoding="UTF-8") #获取根目录 root <- xmlRoot(rdhtml) #获取话题下的所有img标签(里面含有所有的图片网址) Name<-getNodeSet(root,"//div[@class='zm-editable-content clearfix']/img")
#根据Name列表中的内容,img下面有关于三个带图片网址的属性,第一个src是打开帖子直接看到的,后两个data-original\data-actualsrc是该图片的原地址,就是点击图片后大图的网址。
#这里选择data-original网址,利用拉laply函数提取该属性下的网址列表。 Name1 <-laply(Name,xmlGetAttr,name='data-original') #为方便命名,这里截取一部分图片网址后缀作为名称 Name2<-sub("https://pic\\d.zhimg.com/v2-","",Name1)
#建立新文件夹
dir.create("D:/R/Image/zhihu/image") #使用for循环批量下载: for(i in 1:length(Name1)){ download.file(Name1[i],paste0("D:/R/Image/zhihu/image/",Name2[i],sep = ""), mode = "wb") }
最终收获:
爬图的核心要点: