R包,有些用来抓数据,对,你没听错

明天要介绍的R包有点混蛋!

无法可视化或用于捕获数据!

它的核心功能是捕捉,没错,你没听错,就是捕捉,类似于狗仔队!

但它是网页的特殊快照,有点类似于我们常说的网页快照。

底层一直都是通过plantomjs无头浏览器渲染支持,所以可以用js动态脚本解析异步加载的网页。

抓拍有多厉害,基本就是原生浏览器界面的清晰度(不仅格式是静态图片,基本没有像素丢失)。

捕获的输出图像的像素和纵横比支持自定义、缩放缩放、png、jpeg、pdf三种主流图像格式,并支持在窗口中定义元素和滚动长图。 (不要害怕页面太长以至于滚动到顶部)。

支持简单的图像修改、大小调整和内存压缩。

它的名字叫webshot,项目主页在这里:.

关于包下载:

devtools::install_github("wch/webshot"),如果出现超时问题请加载curl包,如果还是不行请切换到非教育网(别问我我怎么知道的,原因莫名其妙!)

这个包底层需要使用PhantomJS浏览器,所以总是需要提前下载。你可以去这个网站()自动下载。包下载后,自带下载PhantomJS webshot::install_phantomjs()的函数,省去版本筛选的麻烦,非常方便!

library("webshot")

webshot包的主要功能只有一个——webshot函数(目前R包开发者很深,一个函数一个包)默认情况下webshot会爬取目标URL的整个网页(不管是你的网页 一个屏幕是否还能保持,虽然单个窗口不能保持,但这个功能也会默认抓取网页的所有视觉内容,所以需要几分钟才能进行长时间的截屏)。

setwd("D:/R/Image/screenshot")
webshot("http://study.163.com/", "yunketang.png",delay = 5)   #输出png格式截屏webshot("http://study.163.com/", "yunketang.jpeg",delay = 5)  #输出jpeg格式截屏webshot("http://study.163.com/", "yunketang.pdf",delay = 5)   #输出PDF格式截屏

由于长屏的长宽比不符合陌陌公众号图片上传规定,无法上传,只能截图,看看帅气的长屏。

delay参数设置的抓取延迟宽度,防止有些内容还没到就记得加载!

pdf上传到公众号编辑失败,来看看其中一张图片的效果吧!

以上是因为没有设置截屏范围,所以默认截取全屏。在此设置截屏参数!

webshot("http://study.163.com/", "yunketangv.png",cliprect="viewport",delay = 5)   
#只抓取当前屏幕可见范围内的网页内容

为什么抓到这些完整的长图,只加载底部图片,前面只有边框和文字,没有显示图片,我猜这是异步加载的原因,虽然是真人操纵浏览器并且浏览器也会根据实际的键盘动作或窗口位置实时更新当前屏幕中的内容,而这些没有滚动到的页面位置只是页框,图片还没有触发更新动作。使用浏览器键盘下拉操作。同时,我们也可以注意到一些图片从零开始的加载过程。

webshot("http://raindu.com/", "raindu.png",cliprect="viewport",delay = 5,zoom=1) 
webshot("http://raindu.com/", "raindu2.png",cliprect="viewport",delay = 5,zoom=2)

zoom参数设置拍摄图像的缩放系数。

webshot("http://music.163.com/", "yunyinyue.png",cliprect="viewport",delay = 5,, expand = c(10, 50, 10, 50))

expand 设置图像输出的行距,以像素为单位。参数只需要提供一个宽度为4的数值向量,分别代表上、右、下、左。

对比云音乐原网页与设置页间距后图片的差异。

仔细对比会发现,使用常用截图工具(faststone)得到的截图结果是用Chrome渲染的,字体和布局比较逼真,清晰度不好(可能是工具限制)。锐度比较好,上面的字体渲染有失真。 (粗体)。

webshot功能允许你输入css表达式来选择要截取的网页部分:

webshot("http://study.163.com/", "yunyinyuejubu.png",selector = ".m-slide.f-pr",delay = 2) 
webshot("http://music.163.com/", "yunyinyuejubu.png",selector = "div#index-banner.n-ban.d-flag",delay = 2)

使用css表达式ie不能截取整个网页,提取网易云课堂首页,中间滚动广告位展示区域。 (广告位没抓到,但是顶部菜单栏抓到了o(╯□╰)o)

webshot 还可以支持简单的压缩和裁剪输出截图!

library("magrittr")
url<-"http://image.baidu.com/search/detail?z=0&word=%E9%98%BF%E5%88%98&hs=0&pn=3&spn=0&di=0&pi=42852035143&tn=baiduimagedetail&is=0%2C0&ie=utf-8&oe=utf-8&cs=1160865886%2C3784169015&os=&simid=&adpicid=0&lpn=0&fm=&sme=&cg=&bdtype=-1&oriquery=&objurl=http%3A%2F%2Fh.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F00e93901213fb80e3cc67a1d3fd12f2eb83894e0.jpg&fromurl=&gsm=0&catename=pcindexhot"webshot(url=url,file ="baiduphoto.png",selector = "div.img-wrapper",delay = 2)  %>%  resize("50%") %>% shrink()

webshot 最强大的地方在于它可以接受多个 URL 并批量抓取网页快照。

urls<-c("http://study.163.com/smartSpec/intro.htm#/smartSpecIntro","http://study.163.com/client/download.htm","http://study.163.com/cp/introduction.htm","http://b.study.163.com/","http://www.icourse163.org/")
webshot(urls, "wangyicourse.png",cliprect ="viewport",delay = 2)

虽然没有解决字体渲染,但是部分图片加载没有完成(可能我设置的等待时间有点短),加载大框架,webshot功能对于动态网页有点笨拙,和静态网页仍然很棒。

除了URL地址,还可以批量拍摄webshot功能。前面的所有参数都支持向量化。部分行距参数可以设置为列表格式,宽度要等于url向量宽度。

今天通过rdom包项目的主页发现了这个有趣的包。 rdom 的作者说他的灵感是从 webshot 开始的。这种包作者和开发者工具真的很有创意。你还想要什么截图工具(我以前觉得我用的faststone截图工具是世界上最好的截图工具,看来我错了o(╯□╰)o)

这个包的应用场景在哪里,比如百度文库有财富价值的重要文件,豆丁网,CNKI的重要应急文件。有些网站不允许复制文本或下载内容。 (没关系,我不要你的内容,对你的网页也不感兴趣,我拍个照就走ie不能截取整个网页,你帮不了我。)

比如现在一些对破解非常严格的网站,恐怕你不需要把别人的整个网站都刮下来(处理起来又麻烦又费力),对网页进行快照。现在OCR识别技术这么好,主图够清晰,分分钟导入表格和文字,但是如果要抓取网页,还是挺折腾的。

这个包作者的设计思路也很简单粗暴,拍照就能解决的事情,又何必爱上其他程序员。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 R包,有些用来抓数据,对,你没听错 https://www.wkzy.net/game/8426.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务