抓取微信公众号中的图片

2015-12-13 23:39:15 +08:00
 dawncold
因为 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 下载,大约是:

```bash
for i in `cat urls`;do wget $i;done
```
前面加的 index 在这里就用得上了,下载好之后会按照顺序排好。

因为最近在搞 js 方面的东西,就用 nodejs 完成上面的工作,大约是这样:

```javascript
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 找你们时也用得上。**
7818 次点击
所在节点    分享创造
7 条回复
sdsnyx
2015-12-13 23:59:01 +08:00
求一个这样的有好图片的公众号
yanwen
2015-12-14 00:05:01 +08:00
可以做成一个小工具不?
dawncold
2015-12-14 00:30:06 +08:00
@sdsnyx 这个我不造啊,那些视觉、设计、艺术方面的公众号都有很多图吧
dawncold
2015-12-14 00:31:54 +08:00
@yanwen 可能会做成一个单页应用,提交一个文章 url 把图链接给出或者把图抓好后打包给出
chanssl
2015-12-14 08:48:04 +08:00
@dawncold 期待!
dawncold
2015-12-14 09:13:44 +08:00
@chanssl 用命令行不是也可以吗,比如: for i in `node cli.js <URL>`;do wget $i;done
joshz
2015-12-17 12:04:19 +08:00
写成油猴脚本用户体验更好吧,不用复制粘贴了,设置个默认下载路径,看到微信公众号文章就提取。当然工作要复杂很多,我就放个嘴炮。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/243298

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX