资讯专栏INFORMATION COLUMN

分享抓取网页截图的一些心得

trigkit4 / 3165人阅读

摘要:最近因为一个活儿所以要完成抓取网页截图这个需求,我研究了几个工具,就向大家分享一下我们的方案了。第二个方案方案分析理由是支持各个平台的,而且用起来很方便。

 最近因为一个活儿所以要完成抓取网页截图这个需求,我研究了几个工具,就向大家分享一下我们的方案了。假如有什么错误和更好的提议,欢迎拍砖。

 因为支付宝已经做过类似的功能,所以我就咨询了@天材他们的方案,感谢他提供了宝贵的资料作参考。

第一个方案:(直接用命令截图,再用ImageMagic裁剪)
伪代码如下:
​(1)截图指令[ " + "xvfb-run.sh --auto-servernum CutyCapt --delay=" + delay+ " --max-wait=" + maxWait + " --url=" + url + " --out=" + filePath + "]
(2)截取指定图片指定大小指令[" + "convertcrop " + cutWidth + "x" + cutHight + "+" + cutStartX + "+" + cutStartY + " " + filePath + " " + filePath + "]

但我觉得第一个方案似乎有点别扭,而且截图的命令也不知道能不能支持多个平台(因为公司只配置了一台笔记本给我,win系统的),所以我就去探讨另外一个方案。

第二个方案:(PhantomJs + NodeJs + ImageMagick)
方案分析:

理由​:
PhantomJs是支持各个平台的,而且用起来很方便。细心的同学可以看到它安装的脚本,是会根据不同平台下载不同的版本。

if (process.platform === "linux" && process.arch === "x64") {
  downloadUrl += "linux-x86_64.tar.bz2"
} else if (process.platform === "linux") {
  downloadUrl += "linux-i686.tar.bz2"
} else if (process.platform === "darwin") {
  downloadUrl += "macosx.zip"
} else if (process.platform === "win32") {
  downloadUrl += "windows.zip"
} else {
  console.log("Unexpected platform or architecture:", process.platform, process.arch)
  exit(1)
}

​步骤和注意点:
​[ 1 ] 安装phantomjs

npm install phantomjs@1.9.2-1

这个版本比较稳定,最好不要下最新版本,我之前弄了好久都安装不成功,就上github看里面的Issue,作者也建议安装1.9.2-1(特别在win下)
​[ 2 ] 安装ImageMagic和gm模块
​根据作者描述GraphicsMagick and ImageMagick for node,所以使用gm的时候注意设置是ImageMagick的模式。

var gm = require("gm").subClass({ imageMagick: true });

​使用方法:(里面的链接都有详细解释,我就不展开了)
​{1}phantomjs模块的使用方法: https://www.npmjs.org/package/phantomjs
​{2}phantomjs的API: http://phantomjs.org/
​{3}gm模块的使用方法: https://www.npmjs.org/package/gm

性能测试:
​本机:
CPU:i5-3230M 2.60GHz
内存:​8G
​截图淘宝首页花费时间:20.0+秒 (山穷水尽疑无路)

​服务器:
​CPU:16 Intel(R) Xeon(R) CPU L5630 @ 2.13GHz
​内存:49552672K(约等于47.25G)
​​截图淘宝首页花费时间:1.0+秒 (柳暗花明又一村)

​第三个方案:(使用webkit2png工具)
​今天刚刚好跟一位腾讯的小伙伴聊天,刚刚好聊起这事儿,他也刚刚好做了跟我相似的东西,但他使用的是webkit2png,所以就互相交流一下了。他是使用webkit2png的,webkit2png是一个命令行工具,其实跟phantomjs也很类似,我查了下也是支持各个平台的。
@TQ博客: http://targetkiller.net/preview-mac-in-win/
具体请移步到文档:http://www.paulhammond.org/webkit2png/

微博:@任重致远-MR梁广彬
英文名:jambinliang
花名:无惟

2014/2/23

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78016.html

相关文章

  • NodeJs爬虫抓取古代典籍,共计16000个页面心得体会总结及项目分享

    摘要:目前这个爬虫还是比较简单的类型的,直接抓取页面,然后在页面中提取数据,保存数据到数据库。总结写这个项目其实主要的难点在于程序稳定性的控制,容错机制的设置,以及错误的记录,目前这个项目基本能够实现直接运行一次性跑通整个流程。 前言 之前研究数据,零零散散的写过一些数据抓取的爬虫,不过写的比较随意。有很多地方现在看起来并不是很合理 这段时间比较闲,本来是想给之前的项目做重构的。后来 利用这...

    legendmohe 评论0 收藏0
  • 如何用Python抓抖音上小姐姐

    摘要:比如分钟破译朋友圈测试小游戏文章里用的方法但有些根本就没有提供网页端,比如今年火得不行的抖音。所以常用的方式就是通过在电脑上装一些抓包软件,将手机上的网络请求全部显示出来。总结下,重点是的抓取,关键是配置代理证书,难点是对请求的分析。 爬虫的案例我们已讲得太多。不过几乎都是 网页爬虫 。即使有些手机才能访问的网站,我们也可以通过 Chrome 开发者工具 的 手机模拟 功能来访问,以便...

    FingerLiu 评论0 收藏0
  • Puppeteer 初探

    摘要:获取获取上下文句柄执行计算销毁句柄除此之外,还可以使用意为在浏览器环境执行脚本,可传入第二个参数作为句柄,而则针对选中的一个元素执行操作。 我们日常使用浏览器或者说是有头浏览器时的步骤为:启动浏览器、打开一个网页、进行交互。 无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。 有了无头浏览器,我们就能做包括但不限于以下事情: 对网页进行截图保存为图片或 ...

    appetizerio 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<