因为 GF 经常找我帮忙把某个微信号发的谋篇文章中的图片提取出来用,所以才写这样的一个工具。
之前我的做法是用 Chrome 打开要提取图片的页面,用 jquery-injection 这个浏览器插件插入一个 jquery 库,把所有 img 都提取出来,并只要 data-src 中的 url ,因为当你打开时服务端会根据你的设备给出最好的图片格式,例如 ios 就给原始的 gif , jpg 等, chrome 等会给出 webp 格式的,而 data-src 中的是原始文件 url 。
得到一个一行行的 url 后复制到编辑器中,替换\n 为',',这样就可以构造一个 python 中列表的样式,直接复制到 python 中处理,当然现在我可能会用 awk ,那样更快,不过得查一些函数。到 python 中主要是给 url 加 index ,例如 url 基本都是 HOST:/mmbiz/HASH/0?wx_fmt=gif 这样的格式,我会把 /0 替换成 /0.0 ,/0.1 ,/0.2 ,并把扩展名加好,扩展名来自 url 中的 wx_fmt 参数(现在看可能从 data-type 中取比较好), index 根据列表的 index 来,之后再把处理好的 url 复制到编辑器中保存,最后用 wget 下载,大约是:
for i in `cat urls`;do wget $i;done
前面加的 index 在这里就用得上了,下载好之后会按照顺序排好。
因为最近在搞 js 方面的东西,就用 nodejs 完成上面的工作,大约是这样:
var request = require('request');
var _ = require('lodash');
var url;
if (process.argv.length > 2) {
url = process.argv[2];
} else {
console.error('please provide url');
process.exit(1);
}
request.get({
url: url
}, function(err, response, body) {
if (response.statusCode != 200) {
console.log(err);
console.log(body);
} else {
var imgUrlPattern = /( http:\/\/mmbiz\.qpic\.cn\/mmbiz\/.*?(\?wx_fmt=(.*?))?)"/g;
var result;
var urls = [];
while((result = imgUrlPattern.exec(body)) != null) {
urls.push(result[1]);
}
urls = _.map(urls, function(url, index) {
return url.replace('/0', '/0.' + index);
});
_.forEach(urls, function(url) {
console.log(url);
});
}
});
之后可能会结合 express , kue , redis 等做一个和之前发布的提取微博视频似的那样的工具。
希望你们的 GF 找你们时也用得上。