过去的 5 年,wcplusPro 一直专注于公众号数据采集、分析,积累大量一手经验、独家心得、稳定策略,这些都呈现在源代码中。有理由相信,wcplusPro源码版一定能助贵司公众号数据业务发展一臂之力。
以下是对源码版的简要介绍,如有其他疑问,欢迎微信、邮箱联系客服,联系方式见底部。
除此之外,我们发现 wcplusPro 源码用户中,有一定比例的 Python 开发者,他们希望从 wcplusPro 中借鉴 Python 开发商用产品的经验。
wcplusPro 采用现代 Web 开发架构,实现了前后端分离,前端使用 Vue2 构建,后端使用 Python3.7.7+ 开发。前后之间通过 RESTful API 和 Websocket 进行通信。
用户可以将 wcplusPro 运行在本地,也可以部署在远程服务器,方便随时随地使用。
支持开箱即用,目标机器安装完 Python3.7.7+ 之后,即可运行使用、二次开发 wcplusPro。如需修改前端 UI,还需安装 node+npm 环境。
wcplusPro 实现了对任意公众号全部历史文章的采集,可采集数据至少包括:
采集效率方面,以上三类数据有所不同:
wcplusPro 本质上是模拟微信用户阅读公众号的文章,后台自动保存目标公众号的推文数据,原理上并不涉及逆行、破解等有害行为,请放心使用。多客户端、多微信用户同时运行,可线性倍速。用户也可以在熟悉数据采集原理之后,自行开发调度策略,实现更大规模的数据采集。
源码版的升级分为两种情况:
升级并非强制性,用户可自行决定;可跨版本升级,按单次升级收费。
-> wcplusPro源码版后端工程 ├── articles ├── cmp │ ├── __init__.py │ ├── database │ │ ├── __init__.py │ │ └── utils.py │ ├── iphone.py │ ├── mongo │ │ ├── __init__.py │ │ └── data_schema.py │ ├── proxy_server │ │ ├── __init__.py │ │ ├── addons.py │ │ └── setproxy.py │ ├── req_data │ │ └── __init__.py │ ├── search │ │ ├── __init__.py │ │ └── api.py │ ├── spider │ │ ├── __init__.py │ │ ├── article.py │ │ ├── article_list.py │ │ ├── comment.py │ │ ├── reading_data.py │ │ └── request.py │ └── update_note │ └── __init__.py ├── controller │ ├── __init__.py │ ├── article.py │ ├── bark.py │ ├── event.py │ ├── gzh.py │ ├── report.py │ ├── req_data.py │ ├── search.py │ ├── settings.py │ ├── task.py │ └── wcplus_export.py ├── db_folder ├── excel ├── macos_install_package.command ├── macos_run_wcplusPro.command ├── main.py ├── model │ ├── __init__.py │ ├── article.py │ ├── gzh.py │ ├── req_data.py │ ├── search.py │ ├── settings.py │ └── task.py ├── requirement.txt ├── settings.py ├── utils │ ├── __init__.py │ ├── data_process.py │ ├── dev.py │ └── network.py ├── view │ ├── __init__.py │ ├── article.py │ ├── category.py │ ├── gzh.py │ ├── report.py │ ├── req_data.py │ ├── task.py │ └── wcplus_export.py ├── webserver │ ├── __init__.py │ ├── handler │ │ ├── __init__.py │ │ ├── article.py │ │ ├── gzh.py │ │ ├── help.py │ │ ├── pca.py │ │ ├── report.py │ │ ├── req_data.py │ │ ├── task.py │ │ ├── test.py │ │ └── user.py │ ├── instance.py │ ├── sio │ │ ├── __init__.py │ │ └── events.py │ └── static │ ├── css │ │ ├── app.95c0334a.css │ │ ├── chunk-1b13f9ed.96ffad72.css │ │ ├── chunk-25474645.be18db89.css │ │ ├── chunk-41a04990.e034db36.css │ │ ├── chunk-5cccc9a2.3c7f5ad9.css │ │ ├── chunk-5e6a2399.30714ffe.css │ │ ├── chunk-6997ea3b.a048f015.css │ │ ├── chunk-8fac7d52.3a62ebdf.css │ │ ├── chunk-c0d1a904.6064858a.css │ │ ├── chunk-e56ac1ce.2e5a6760.css │ │ ├── chunk-elementUI.68c70ad5.css │ │ └── chunk-libs.417a0e7c.css │ ├── favicon.ico │ ├── fonts │ │ ├── element-icons.535877f5.woff │ │ ├── element-icons.732389de.ttf │ │ ├── fontawesome-webfont.674f50d2.eot │ │ ├── fontawesome-webfont.af7ae505.woff2 │ │ ├── fontawesome-webfont.b06871f2.ttf │ │ └── fontawesome-webfont.fee66e71.woff │ ├── img │ │ ├── 404.a57b6f31.png │ │ ├── 404_cloud.0f4bc32b.png │ │ └── fontawesome-webfont.912ec66d.svg │ ├── index.html │ └── js │ ├── app.3b77e89a.js │ ├── chunk-1b13f9ed.ee236f20.js │ ├── chunk-25474645.bd6d7d8b.js │ ├── chunk-40b58352.5045cf5b.js │ ├── chunk-41a04990.dd747a82.js │ ├── chunk-5cccc9a2.6921f155.js │ ├── chunk-5e6a2399.7969dcce.js │ ├── chunk-6997ea3b.69b93eff.js │ ├── chunk-8fac7d52.8151b315.js │ ├── chunk-c0d1a904.a072f1f4.js │ ├── chunk-e56ac1ce.f5d86af5.js │ ├── chunk-elementUI.41d70156.js │ └── chunk-libs.6248ee4e.js ├── windows_install_package.bat └── windows_run_wcplusPro.bat
-> wcplusPro源码版前端工程 ├── LICENSE ├── README.md ├── babel.config.js ├── build │ └── index.js ├── jest.config.js ├── jsconfig.json ├── mock │ ├── index.js │ ├── mock-server.js │ ├── table.js │ ├── user.js │ └── utils.js ├── package.json ├── postcss.config.js ├── public │ ├── favicon.ico │ └── index.html ├── src │ ├── App.vue │ ├── api │ │ ├── article.js │ │ ├── bark.js │ │ ├── category.js │ │ ├── crawler.js │ │ ├── gzh.js │ │ ├── help.js │ │ ├── report.js │ │ ├── reqData.js │ │ ├── settings.js │ │ ├── table.js │ │ ├── task.js │ │ ├── testApi.js │ │ └── user.js │ ├── assets │ │ └── 404_images │ │ ├── 404.png │ │ ├── 404_cloud.png │ │ └── img │ │ ├── like.png │ │ ├── luntan.png │ │ └── zsxq.png │ ├── components │ │ ├── Breadcrumb │ │ │ └── index.vue │ │ ├── Hamburger │ │ │ └── index.vue │ │ ├── SvgIcon │ │ │ └── index.vue │ │ └── widget │ │ ├── changeMode.vue │ │ └── percentBar.vue │ ├── data │ │ ├── friend.js │ │ ├── friend_map.js │ │ └── group.js │ ├── icons │ │ ├── index.js │ │ ├── svg │ │ │ ├── dashboard.svg │ │ │ ├── example.svg │ │ │ ├── eye-open.svg │ │ │ ├── eye.svg │ │ │ ├── form.svg │ │ │ ├── link.svg │ │ │ ├── nested.svg │ │ │ ├── password.svg │ │ │ ├── table.svg │ │ │ ├── tree.svg │ │ │ └── user.svg │ │ └── svgo.yml │ ├── jslib │ │ └── echarts.js │ ├── layout │ │ ├── components │ │ │ ├── AppMain.vue │ │ │ ├── Navbar.vue │ │ │ ├── Sidebar │ │ │ │ ├── FixiOSBug.js │ │ │ │ ├── Item.vue │ │ │ │ ├── Link.vue │ │ │ │ ├── Logo.vue │ │ │ │ ├── SidebarItem.vue │ │ │ │ └── index.vue │ │ │ └── index.js │ │ ├── index.vue │ │ └── mixin │ │ └── ResizeHandler.js │ ├── main.js │ ├── permission.js │ ├── router │ │ └── index.js │ ├── settings.js │ ├── sio │ │ ├── index.js │ │ └── reqData.js │ ├── store │ │ ├── getters.js │ │ ├── index.js │ │ └── modules │ │ ├── app.js │ │ ├── settings.js │ │ └── user.js │ ├── styles │ │ ├── element-ui.scss │ │ ├── index.scss │ │ ├── mixin.scss │ │ ├── report.css │ │ ├── sidebar.scss │ │ ├── transition.scss │ │ └── variables.scss │ ├── utils │ │ ├── auth.js │ │ ├── data-process.js │ │ ├── get-page-title.js │ │ ├── index.js │ │ ├── request.js │ │ ├── time.js │ │ └── validate.js │ ├── views │ │ ├── 404.vue │ │ ├── analysis │ │ │ └── all_reading_data.vue │ │ ├── category │ │ │ └── index.vue │ │ ├── command │ │ │ └── index.vue │ │ ├── dashboard │ │ │ ├── index.vue │ │ │ └── updateLog.vue │ │ ├── form │ │ │ └── index.vue │ │ ├── gzh │ │ │ ├── crawler.vue │ │ │ ├── crawler_pro │ │ │ │ ├── args.vue │ │ │ │ ├── control.vue │ │ │ │ ├── index.vue │ │ │ │ ├── new_task.vue │ │ │ │ ├── status.vue │ │ │ │ └── tasks.vue │ │ │ └── finished.vue │ │ ├── login │ │ │ └── index.vue │ │ ├── nested │ │ │ ├── menu1 │ │ │ │ ├── index.vue │ │ │ │ ├── menu1-1 │ │ │ │ │ └── index.vue │ │ │ │ ├── menu1-2 │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── menu1-2-1 │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── menu1-2-2 │ │ │ │ │ └── index.vue │ │ │ │ └── menu1-3 │ │ │ │ └── index.vue │ │ │ └── menu2 │ │ │ └── index.vue │ │ ├── report │ │ │ ├── components │ │ │ │ ├── fulltextSearch.vue │ │ │ │ ├── messageBanner.vue │ │ │ │ ├── rankTable.vue │ │ │ │ └── trendLine.vue │ │ │ └── index.vue │ │ ├── settings │ │ │ ├── category.vue │ │ │ ├── crawler.vue │ │ │ ├── daimusic.vue │ │ │ ├── general.vue │ │ │ └── upgradeNote.vue │ │ ├── table │ │ │ └── index.vue │ │ ├── test │ │ │ └── index.vue │ │ ├── tree │ │ │ └── index.vue │ │ └── widget │ │ └── category.vue │ └── views7 │ ├── crawler │ │ ├── cmp │ │ │ ├── currentTask.vue │ │ │ ├── historyTask.vue │ │ │ ├── newTask.vue │ │ │ ├── proxyControl.vue │ │ │ ├── reqData.vue │ │ │ ├── taskNotifation.vue │ │ │ ├── taskStatus.vue │ │ │ └── userControl.vue │ │ └── index.vue │ ├── gzhData │ │ ├── cmp │ │ │ ├── allArticles.vue │ │ │ ├── allReadingData.vue │ │ │ └── finishedGzh.vue │ │ └── index.vue │ ├── help │ │ ├── cmp │ │ │ ├── bark.vue │ │ │ ├── doc.vue │ │ │ ├── license.vue │ │ │ └── upgradeNote.vue │ │ └── index.vue │ ├── report │ │ ├── cmp │ │ │ ├── numberCard │ │ │ │ ├── cmp │ │ │ │ │ ├── influenceInfo.vue │ │ │ │ │ ├── locationInfo.vue │ │ │ │ │ ├── quantityInfo.vue │ │ │ │ │ └── timeInfo.vue │ │ │ │ └── index.vue │ │ │ ├── postCalender.vue │ │ │ ├── readingData.vue │ │ │ └── search │ │ │ ├── cmp │ │ │ │ ├── pageControl.vue │ │ │ │ ├── searchArticleItem.vue │ │ │ │ ├── searchBar.vue │ │ │ │ └── statInfo.vue │ │ │ └── index.vue │ │ └── index.vue │ ├── search │ │ ├── cmp │ │ │ ├── grafic.vue │ │ │ ├── searchResult.vue │ │ │ └── statistics.vue │ │ └── index.vue │ ├── theme │ │ └── index.vue │ └── widgets │ ├── reqDataBox.vue │ ├── tableNumberCell.vue │ ├── tablePercentCell.vue │ └── tableTagCell.vue ├── tests │ └── unit │ ├── components │ │ ├── Breadcrumb.spec.js │ │ ├── Hamburger.spec.js │ │ └── SvgIcon.spec.js │ └── utils │ ├── formatTime.spec.js │ ├── param2Obj.spec.js │ ├── parseTime.spec.js │ └── validate.spec.js └── vue.config.js