User-Profile-Image
hankin
  • 5
  • 首页
  • 仓库
  • 留言
  • 免费下载v1.3.5
  • 分类
    • Yii2
    • wordpress
    • typeecho
    • server
    • qrcode
    • postgresql
    • php
    • jquery
    • javascript
    • html5
    • go
    • css3
    • coding
  • 页面
    • icon图标
    • 专题
    • 建站维护
    • 留言
    • 站点地图
  • 友链
    • 老赵茶馆
    • 淮城一只猫
    • 雨林寒舍
    • 饼子的博客
    • 轩枫阁
    • 广告联盟大事记
    • 主题笔记
    • 八方博客
    • 张维龙的个人博客
    • 瑞课学院
    • BBJ不败君
    • 悠悠吧
    • Heanny Blog
    • 资源谷
    • Yolen
Help?

Please contact us on our email for need any support

Support
    首页   ›   正文
php

手写抓取单个微信公众号的全部文章列表

2020-04-03 08:14:58
427  0 2

单个微信公众号抓取
最近看了很多公众号的文章,突然想把全部的公众号抓取的想法.
于是,搜了一下,发现很多的博客写怎么抓取,但是尝试下来,还是比较麻烦,基本上没有几个可以使用的.
于是研究一下思路,主要是将文章列表转到浏览器上,然后再进行抓取.
于是我本人就按这个思路,自己做了一个微信公众号的爬虫,虽然速度比较慢,但是也够爬下来列表了.
下面是详细步骤

  • 首先在微信的客户端上登录
  • 点击头像 进入公众号
  • 点击公众号的头像,找文章列表按钮
  • 然后将文章列表点开,
  • 转发给自己的 文件传输助手
  • 用默认浏览器打开 我选择的本地浏览器是 搜狗
  • 按F12打开 页面调试
  • 进入到console 里复制下面的代码进去
let map = new Map();
let lis = [];
let before = 0;
let inter = 0;
let scrollToY = 0;

function scrollMyPage(){
    inter = setInterval(collect_data,2000);
}


function collect_data(){
    before = map.size;
    let msgs = document.getElementsByClassName("weui_media_box");
    for(let msg of msgs){
        let dt_ele = msg.getElementsByClassName("weui_media_extra_info")
        let title_ele = msg.getElementsByClassName("weui_media_title"); 

        let dt =  dt_ele[0].innerText;
        let title = "";
        let url = "";

        try{
            url = title_ele[0].attributes["hrefs"].nodeValue;
            title = title_ele[0].innerText;
        }catch(e){
            console.log(e);
            console.log(msg);
        }

        let obj = {};
        obj["dt"] = dt;
        obj["url"] = url;
        obj["title"] = title;

        map.set(url,obj)

    }
    //操作过后,就没数据了...
    if(before == map.size){
        clear_inter();
        save_data();
    }
    scrollToY = scrollToY + 4000;
    window.scrollTo(0,scrollToY);
}

function save_data(){
    for(let ent of map){
        lis.push(ent[1]);
    }

    // 创建a标签
    var elementA = document.createElement('a');

    //文件的名称为时间戳加文件名后缀
    elementA.download = +new Date() + ".json";
    elementA.style.display = 'none';

    //生成一个blob二进制数据,内容为json数据
    var blob = new Blob([JSON.stringify(lis)]);

    //生成一个指向blob的URL地址,并赋值给a标签的href属性
    elementA.href = URL.createObjectURL(blob);
    document.body.appendChild(elementA);
    elementA.click();
    document.body.removeChild(elementA);

}

function clear_inter(){
    clearInterval(inter);
}

scrollMyPage();
  • 等待页面抓取完成,注意不要关闭页面,如果页面没有到底就停止了抓取,就重新打开页面,然后按F12再操作一遍
  • 抓取完成后,会产生一个下载文件,下载到本地,就拿到了该公众号的全部文件.
  • 详细的列表页,可以单独抓取.
    操作起来比较简单,就是要等页面抓取完才能挪动页面,相对来说比较简单.

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

2 打赏
hankin
smarty_hankin主题 持续为开发者免费开源!
143文章 278评论 676点赞 167369浏览

关注公众号 回复【下载主题】
加QQ群1018841266
最新评论
+195
随机文章
如何理解php socket
10个月前
沟通的障碍 | 让对方听懂你在说什么
3年前
php中抽象方法与普通方法的主要区别是什么
10个月前
2020情人节表白页面(代码分享)
9个月前
WordPress主题:唤醒-hankin 更新至2.0.0版本
3年前
我的作品




tags
css3 html5 javascript php postgresql qrcode typeecho wordpress wordpress主题 Yii2
Copyright © 2021 网站备案号: 浙ICP备20002401号
smarty_hankin 主题. Designed by hankin
主页
页面
  • icon图标
  • 专题
  • 建站维护
  • 留言
  • 站点地图
博主
hankin
hankin 管理员
博客模板_网站模板_HTML模板_博客模板网站免费下载
143 文章 278 评论 167369 浏览
测试
测试
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付