首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >微信公众号文章爬取 | 数据爬取及可视化系列

微信公众号文章爬取 | 数据爬取及可视化系列

作者头像
mixlab
发布2018-04-16 16:55:43
发布2018-04-16 16:55:43
1.9K0
举报

简单来说,整个技术路线是这样的:

用电脑架设一个代理服务器,

然后手机设置wifi代理,

打开手机微信,

浏览微信文章的历史页面,

在电脑端截取获取的数据,再做其他处理……

具体步骤如下:

一、安装代理服务器

目前使用的是Anyproxy。这个软件的特点是可以获取到https链接的内容。

1.1 在命令行或者终端运行 npm install -g anyproxy,mac系统需要加上sudo;

1.2 生成RootCA,https需要这个证书:运行命令sudo anyproxy --root(windows可能不需要sudo);

1.3 启动anyproxy运行命令:sudo anyproxy -i;参数-i是解析HTTPS的意思;

1.4 安装证书,在手机中安装证书,手机浏览器打开 http://localhost:8002/fetchCrtFile ,能获取rootCA.crt文件。

localhost修改为运行anyproxy的电脑的ip地址,注意手机跟电脑要位于同一个局域网哦。

1.5 设置代理:在手机wifi连接管理中,设置代理,代理服务器地址就是运行anyproxy的电脑的ip地址。代理服务器默认端口是8001;

现在打开微信,点击到任意一个公众号历史消息或文章中,在终端都可以看到响应的代码滚动。

1.6 电脑打开浏览器地址http://localhost:8002 可以看到anyproxy的web界面。从微信中点开一个历史消息页面,然后再看浏览器的web界面,会滚动出现历史消息页面的地址。

二、用SPY爬取文章列表

由于要保存到数据库里,所以我动用了自己开发的SPY爬虫软件,如果不需要保存到数据库,用chrome就可以了。

2.1 手机打开公众号的历史文章列表,下拉至最底下,把所有文章都加载出来。

2.2 打开SPY,输入地址http://localhost:8002,贴入代码。

代码大致的逻辑是:

a、获取mp/profile_ext?action=home&__biz=MzA3ODkyNDg4OA=

中获取到的文章列表数据。

b、由于文章列表数据是异步加载的,所以暂时需要手工在手机里把下拉文章列表,把所有的文章加载进来。

c、然后,SPY里把所有的文章数据提取出来,保存到数据库里。

代码如下:

代码语言:javascript
复制
var results = [];

var doms = document.querySelectorAll('.record_status_done');
var pages = [];
doms.forEach(function(dom, i) {
  var isUrl = dom.children[4].getAttribute('title');
  if (isUrl.match(/\/mp\/profile\_ext\?action\=getmsg\&/i)) {
    pages.push(dom);
  }
});
var step = 0;
stepByStep();
function stepByStep() {
  pages[step].click();
  var res;
  setTimeout(function() {
    if (document.querySelector('.resBodyContent')) {
      res = JSON.parse(JSON.parse(document.querySelector('.resBodyContent').innerText).general_msg_list).list;
    }
    if (res) {
      res.forEach(function(r, i) {
        if (r.app_msg_ext_info) {
          var target = r.app_msg_ext_info;
          console.log(target, step, 'num');
          var obj_save = {
            author: target.author,
            content_url: target.content_url,
            cover: target.cover,
            digest: target.digest,
            title: target.title,
          };
          spy.save(obj_save);
          results.push(obj_save);
          console.log(results.length, step);
        }
      });
    } else {
      console.log(res, document.querySelector('.resBodyContent'))
    }
    step = step + 1;
    setTimeout(function() {
      document.querySelector('.escBtn').click();
    }, 1000);
    if (step < pages.length) {
      setTimeout(function() {
        window.stepByStep();
      }, 3000);
    } else {
      spy.getResult(results)
    }
  }, 1000);
};

愉快的爬取文章吧~

爬下来做点好玩的事情~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科技Mix设计Lab 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档