我是如何批量保存微博评论图片的

mengkun 11K 10

前几天在微博上看到 @马克少年 的一条神微博:在评论区里分享了 1000 多张表情包。

我是如何批量保存微博评论图片的

我这人一看到表情图就想保存下来。不过这么多表情图如果要手动的一张张点开并保存,真的是一件麻烦事,而且太蠢。

既然咱是玩技术的,就得用技术手段把它给全部保存下来。我看到微博的评论是采用 ajax 从后台加载出来的,于是第一步就想到了通过抓取它的接口评论数据。通过浏览器 F12 一监控,发现评论接口如下:

  1. http://weibo.com/aj/v6/comment/big?ajwvr=6&id=4055816330135380&root_comment_max_id=4056668591224614&page=4&filter=all&sum_comment_number=43&filter_tips_before=1&from=singleWeiBo&__rnd=1485224641725  

通过猜测,评论接口中的 “page=4” 就是获取第四页的评论数据,那么我们可以通过修改它的值来获取其它页的评论。经过测试,发现果然没错。

不过在取回数据时发现,微博的评论接口里返回的数据内容并不完全是 json 格式,而是直接返回的 html,整个内容非常凌乱!

我是如何批量保存微博评论图片的

微博评论接口返回的数据

既然无论怎样都得到的是 html 内容,那还不如直接在尝试从前端来取得数据。

我的办法是先点击“查看更多”,把这条微博下的所有评论都加载出来:

我是如何批量保存微博评论图片的

这里因为评论内容确实有点多,如果你要手动的一个个去点加载更多评论,也得点好一会儿。一个解决办法是可以写一个 js 脚本,利用 js 脚本自动点击 “more_txt” 这个 class。

我是如何批量保存微博评论图片的

待到评论完全加载出来了,再通过审查元素,保存 list_ul 这部分的所有 html 内容,这一步详见以下gif

我是如何批量保存微博评论图片的

再新建一个文本文档,把刚刚获取到的 html 内容保存并另存为 html 格式。

再对获取到的评论部分 html 代码分析(别问我怎么分析的,只能是不断去试),发现评论部分的图片真实链接获取方式是 “http://ww2.sinaimg.cn/bmiddle/” 再加上 imagecard 中的 pid 值。比如说这条回复内容,其中真实的图片地址就是
http://ww2.sinaimg.cn/bmiddle/0062WLz0gw1fb3bbebmn1j316z0qomzz

我是如何批量保存微博评论图片的

用正则表达式

  1. imagecard="pid=([^"]*)"  

提取出所有的 pid 值,然后补全前面的链接,再把获取的链接通过迅雷批量下载下来。至此,完美地保存下来了所有的图片!

我是如何批量保存微博评论图片的

最后,我已将这些表情图打包,需要的可以前往下载:

传送门

发表评论 取消回复
表情 图片 链接 代码

  1. 1050016000
    1050016000 Lv 1

    楼主,有这个过程的详细代码吗?我是计算机小白,需要手把手教学[aru_15]

  2. bbsokok
    bbsokok Lv 1

    楼主,你没说怎么批量提取那个PID值出来用到迅雷上那步

  3. V泡网
    V泡网 Lv 2

    很棒~话说图片怎么不弄个灯箱呢?还有可以交换友链么?

    • mengkun
      mengkun 站长

      @V泡网图片是有灯箱的,编辑这篇文章时忘记把图片链接到原图了,所以显示不出灯箱……

      • V泡网
        V泡网 Lv 2

        @mengkun我说怎么点不起来了。
        能友链的不?

      • mengkun
        mengkun 站长

        @V泡网这个可以有 [握手]

    • mengkun
      mengkun 站长

      @V泡网新年快乐,已添加贵站友链

      • V泡网
        V泡网 Lv 2

        @mengkun已经添加你的啦~ [酷]

  4. 瀚宇
    瀚宇 Lv 2

    lbe平行空间的斗图广场有很多表情图,孟坤师傅能否按照这个方法把它们全部保存下来? [坏笑]

    • mengkun
      mengkun 站长

      @瀚宇感谢提供线报 [握手] 待会去研究研究~

分享