那些10w+的公众号都在写什么?

2024-03-11 18:32
文章标签 公众 10w

本文主要是介绍那些10w+的公众号都在写什么?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

出于好奇,那些10w+的公众号都写了些什么,于是我写了几个脚本爬取了各行业Top的公众号文章,进行了关键词统计。

抓取数据、分析用到了3中语言:Node.js,Java,Python。废话不多说,直接上代码。

1(NODEJS)

puppeteer模拟登陆,抓取微信公众号链接:

/**
* load wechat article urls on newrank.cn
**/
const puppeteer = require('puppeteer');
//emulate iphone
const userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36';
const workPath = './newrank_cn1111';
const fs = require("fs");
const userName = "公众号";
const ppwwdd = "caiyongji";
if (!fs.existsSync(workPath)) {fs.mkdirSync(workPath)
}
const loginUrl = 'https://www.newrank.cn/public/login/login.html?back=https%3A//www.newrank.cn/';const monthlyRankUrl = "https://www.newrank.cn/public/info/list.html?period=month&type=data";const detailUrl = "https://www.newrank.cn/public/info/detail.html?account=";(async () => {const browser = await puppeteer.launch({headless: false});//set headless: true will hide chromium UIconst page = await browser.newPage();await page.setUserAgent(userAgent);await page.setViewport({width:1920, height:1000});await page.setRequestInterception(true);//filter to block imagespage.on('request', request => {if (request.resourceType() === 'image')request.abort();elserequest.continue();});await page.goto(loginUrl);//loginawait loginOperate();//await page.close();await processMonthlyRank('.wx-right-type-list-spe a[icon=ss]');await processMonthlyRank('.wx-right-type-list-spe a[icon=mgs]');await processMonthlyRank('.wx-right-type-list-spe a[icon=cf]');await processMonthlyRank('.wx-right-type-list-spe a[icon=kj]');await processMonthlyRank('.wx-right-type-list-spe a[icon=cy]');await processMonthlyRank('.wx-right-type-list-spe a[icon=qc]');await processMonthlyRank('.wx-right-type-list-spe a[icon=ls]');await processMonthlyRank('.wx-right-type-list-spe a[icon=zc]');await processMonthlyRank('.wx-right-type-list-spe a[icon=jy]');await processMonthlyRank('.wx-right-type-list-spe a[icon=xs]');await processMonthlyRank('.wx-right-type-list-spe a[icon=zw]');await processMonthlyRank('.wx-right-type-list-spe a[icon=qy]');await processMonthlyRank('.wx-right-type-list-spe a[icon=wh]');await processMonthlyRank('.wx-right-type-list-spe a[icon=bk]');await processMonthlyRank('.wx-right-type-list-spe a[icon=jk]');await processMonthlyRank('.wx-right-type-list-spe a[icon=shs]');await processMonthlyRank('.wx-right-type-list-spe a[icon=ms]');await processMonthlyRank('.wx-right-type-list-spe a[icon=sj]');await processMonthlyRank('.wx-right-type-list-spe a[icon=lx]');await processMonthlyRank('.wx-right-type-list-spe a[icon=ym]');await processMonthlyRank('.wx-right-type-list-spe a[icon=qg]');await processMonthlyRank('.wx-right-type-list-spe a[icon=ty]');await processMonthlyRank('.wx-right-type-list-spe a[icon=mt]');await processMonthlyRank('.wx-right-type-list-spe a[icon=zs]');await processMonthlyRank('#wx_month_all');async function loginOperate(){try{await page.click('div[data-type=pwd]');}catch(err){console.log('login#1');}try{await page.type('#account_input',userName);await page.type('#password_input',ppwwdd);}catch(err){console.log('login#2');}try{await page.click('#pwd_confirm');}catch(err){console.log('login#3');}}async function processMonthlyRank(btn){const tab = await browser.newPage();await tab.setUserAgent(userAgent);await tab.setViewport({width:1920, height:1000});await tab.setRequestInterception(true);//filter to block imagestab.on('request', request => {if (request.resourceType() === 'image')request.abort();elserequest.continue();});await tab.goto(monthlyRankUrl);try{await tab.click(btn);}catch(err){console.log('processMonthlyRank#1');}let fileName = await tab.evaluate(function(param){return document.querySelector(param).innerHTML;},btn);console.log('-------------------------'+fileName+'-------------------------');await scrollWait(tab);await waitSecond(tab);const sel = '.wx_main tr';const texts = await tab.evaluate((sel) => {let elements = Array.from(document.querySelectorAll(sel));let txt = elements.map(element => {return element.innerText})return txt;}, sel);console.log('total rows: '+texts.length);let contents='记录条数'+(texts.length-1)+'\n\n';texts.forEach(function(c,index){if(index>0){contents+=c+'\n\n';}});const fs = require("fs");fs.writeFileSync(workPath+'/'+fileName+'.txt',contents);console.log(fileName + " has been extracted to local.");const idSel = '.wx_main tr a[href^="detail.html"]';const ids = await tab.evaluate((idSel) => {let elements = Array.from(document.querySelectorAll(idSel));let txt = elements.map(element => {return element.innerText})return txt;}, idSel);let idContents='';let w_name;let flag =true;/*ids.forEach(async function(id,index){if(index%2!=0){idContents+=id+'\n';await getDetail(fileName,w_name,id);w_name =null;}else{w_name=id;}});*/await (async ()=>{for(let i=0;i<ids.length;i++){if(i%2!=0){idContents+=ids[i]+'\n';await getDetail(fileName,w_name,ids[i]);w_name =null;}else{w_name=ids[i];}}})();let idFile = 'id_'+fileName;fs.writeFileSync(workPath+'/'+idFile+'.txt',idContents);console.log(idFile + " has been extracted to local.");await tab.close();}async function scrollWait(p, n){if(n==null) n=5;for(let i= 0; i<n;i++){try{await p.evaluate(()=>window.scrollTo(0, document.body.scrollHeight));await p.waitForNavigation({timeout:500,waitUntil: ['networkidle0']});}catch(err){console.log('scroll to bottom and then wait 500 ms.');}}}async function waitSecond(p){try{await p.waitForNavigation({timeout:2000,waitUntil: ['networkidle0']});}catch(err){//console.log('wait 1 sec.');}}async function getDetail(cat,name,id){const tab = await browser.newPage();await tab.setUserAgent(userAgent);await tab.setViewport({width:1920, height:1000});await tab.setRequestInterception(true);//filter to block imagestab.on('request', request => {if (request.resourceType() === 'image')request.abort();elserequest.continue();});await tab.goto(detailUrl+id);await waitSecond(tab);const sel = '#info_detail_article_top li .title a';const hrefs = await tab.evaluate((sel) => {let elements = Array.from(document.querySelectorAll(sel));let links = elements.map(element => {return element.href})return links;}, sel);let urlList='';hrefs.forEach(function(href,index){urlList+=href+"\n";});const fs = require("fs");if (!fs.existsSync(workPath+'/'+cat)) {fs.mkdirSync(workPath+'/'+cat)}fs.writeFileSync(workPath+'/'+cat+'/'+id+'_top_'+name+'.txt',urlList);const sel1 = '#info_detail_article_lastest li .title a';const hrefs1 = await tab.evaluate((sel1) => {let elements = Array.from(document.querySelectorAll(sel1));let links = elements.map(element => {return element.href})return links;}, sel1);let urlList1='';hrefs1.forEach(function(href,index){urlList1+=href+"\n";});fs.writeFileSync(workPath+'/'+cat+'/'+id+'_lastest_'+name+'.txt',urlList1);console.log(id+' '+name+' has been extracted to local.');await tab.close();}})();

2(JAVA)

Jsoup抓取微信文章文本:

package com;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadLocalRandom;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;public class WeChatUrls extends Thread {private File catFile;final static Integer ThreadNum = 1;final String ERROR = "ERROR";private final static String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36";private final static String WORK_FOLDER = "T:\\Developer\\puppeteerTestCase\\newrank_cn_articles";private final static String READ_URLS_FOLDER = "T:\\Developer\\puppeteerTestCase\\newrank_cn";public WeChatUrls(File cat) {this.catFile = cat;}private String getUrlProxyContent(String url) {String body = ERROR;try {Document doc = Jsoup.connect(url).userAgent(USER_AGENT).get();if (doc.select("body") != null) {body = doc.select("body").text();}} catch (IOException e) {System.out.println("ERROR URL: " + url);e.printStackTrace();}return body;}private void write(String content, String fileName) {File f = new File(fileName);FileWriter fw = null;BufferedWriter bw = null;try {if (!f.exists()) {f.getParentFile().mkdirs();f.createNewFile();}
//           fw = new FileWriter(f.getAbsoluteFile(), true); // true表示可以追加新内容fw = new FileWriter(f.getAbsoluteFile()); // 表示不追加bw = new BufferedWriter(fw);bw.write(content);bw.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {File baseFolder = new File(READ_URLS_FOLDER);File[] cataFiles = baseFolder.listFiles();ExecutorService service = Executors.newFixedThreadPool(ThreadNum);Arrays.asList(cataFiles).stream().forEach(catFile -> {if (catFile.isFile() && catFile.getName().startsWith("id")) {service.execute(new WeChatUrls(catFile));}});service.shutdown();}private void process() {
//      Set<String> redoSet = new HashSet<>();String catagory = catFile.getName().split("\\.")[0].split("_")[1];File urlFolder = new File(READ_URLS_FOLDER + "\\" + catagory);File[] urlFiles = urlFolder.listFiles();if (urlFiles != null) {Arrays.asList(urlFiles).stream().forEach(urlFile -> {try {BufferedReader reader = new BufferedReader(new FileReader(catFile));String wechatId = null;int countLatest = 1;int countTop = 1;while ((wechatId = reader.readLine()) != null) {if (urlFile.getName().startsWith(wechatId)) {String wechatName = urlFile.getName().split("\\.")[0].split("_")[2];
//                          if (urlFile.length() == 0) {
//                              redoSet.add("\"" + catagory + "\",\"" + wechatName + "\",\"" + wechatId + "\"");
//                          }BufferedReader r = new BufferedReader(new FileReader(urlFile));String wechatUrl = null;while ((wechatUrl = r.readLine()) != null) {String writePath = WORK_FOLDER + "\\" + catagory + "\\"+ (urlFile.getName().contains("top") ? "top" : "latest") + "\\" + wechatId+ "_" + wechatName + "_"+ (urlFile.getName().contains("top") ? countTop++ : countLatest++)+".txt";String content = getUrlProxyContent(wechatUrl);write(content, writePath);System.out.println(writePath);Thread.sleep(ThreadLocalRandom.current().nextInt(500, 3000));}r.close();}}reader.close();} catch (Exception e) {e.printStackTrace();}});}
//      redoSet.stream().forEach(System.out::println);}@Overridepublic void run() {process();}
}

3(PYTHON)

wordcloud生成词云:

# -*- coding: utf-8 -*-
import json
import random
import time
import os
from pyecharts import Bar,Geo,Line,Overlap
import jieba
from scipy.misc import imread
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
from collections import Counter
os.chdir('T:/Developer/puppeteerTestCase/newrank_cn_articles')stopWords = ['微信','二维码','二维','扫一','一扫','公众','赞赏','转账','关注','打开','阅读','图片','关闭','取消','程序']def proc(folder, type):fileLines = []rootdir = './'+folder+'/'+typelist = os.listdir(rootdir)for i in range(0,len(list)):path = os.path.join(rootdir,list[i])if os.path.isfile(path):try:fo = open(path, 'r+')fileLines += fo.readlines()except:print('error while processing file: ' + path)_str =  ' '.join(fileLines)words_list = []word_generator = jieba.cut_for_search(_str)  for word in word_generator:words_list.append(word)words_list = [k for k in words_list if len(k)>1 and k not in stopWords]back_color = imread('back.jpg')wc = WordCloud(background_color='white',max_words=2000,mask=back_color,max_font_size=300,font_path="C:/Windows/Fonts/msyh.ttc",random_state=42)_count = Counter(words_list)wc.generate_from_frequencies(_count)image_colors = ImageColorGenerator(back_color)wc.recolor(color_func=image_colors)#plt.figure()#plt.imshow(wc.recolor(color_func=image_colors))#plt.axis('off')# The pil way (if you don't have matplotlib)image = wc.to_image()image.show()jpgFile = './'+type+'_'+folder+'.jpg'image.save(jpgFile)print('image File saved:' + jpgFile)basedir = './'
baselist = os.listdir(basedir)
for l in range(0,len(baselist)):p = os.path.join(basedir,baselist[l])if os.path.isdir(p):proc(os.path.basename(p), 'top')

4

词云结果涉及23个维度,得出结果如下:

TOP500公众号文章

这里写图片描述

创业

这里写图片描述

健康

这里写图片描述

教育

这里写图片描述

乐活

这里写图片描述

企业

这里写图片描述

情感

这里写图片描述

体育娱乐

这里写图片描述

文化

这里写图片描述

文摘

这里写图片描述

幽默

这里写图片描述

政务

这里写图片描述

旅行

这里写图片描述

时事

这里写图片描述

时尚

这里写图片描述

民生

这里写图片描述

汽车

这里写图片描述

百科

这里写图片描述

科技

这里写图片描述

美体

这里写图片描述

美食

这里写图片描述

职场

这里写图片描述

财富

这里写图片描述

5

数据集已开源。
关注公众号 caiyongji 回复 10w_article。获取代码以及数据
或github:https://github.com/caiyongji/wechat-ranking

这篇关于那些10w+的公众号都在写什么?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/798679

相关文章

下载量10w+!LLM经典《大型语言模型:语言理解和生成》pdf分享

介绍 近年来,人工智能在新语言能力方面取得了显著进展,深度学习技术的快速发展推动了语言AI系统在文本编写和理解方面的表现。这一趋势催生了许多新功能、产品和整个行业的兴起。 本书旨在为Python开发者提供实用工具和概念,帮助他们利用预训练的大型语言模型的能力,如拷贝写作、摘要等用例;构建高级的LLM流水线来聚类文本文档并探索主题;创建超越关键词搜索的语义搜索引擎;深入了解基础Transfo

2024霸王餐小程序cps,h5公众号小程序开源版系统搭建开发,外卖霸王餐小程序系统源码

目录 前言: 一、霸王餐小程序的操作是怎么样的? 二、霸王餐系统后台 三、怎么搭建部署? 前言: 霸王餐项目基于美团和饿了么平台开发的小程序。 一、霸王餐小程序的操作是怎么样的? 1、进入小程序后选择自己要下单的店铺,点击去抢单,点击立即抢单。 2、输入平台外卖绑定的手机号,点击确认报名。按照步骤操作即可。 3、等待外卖送达后,完成评价即可。 二、霸王餐系统后台

微信公众号h5网页-调用录音评测

一、全局引入jweixin-1.6.0.js微信能力插件; 二、初始化微信配置,开启音频相关能力; initWxConfig() {let url = window.location.href.split('#')[0]let data = { url: url }this.$http.get(this.$api.getTicket, { params: data }).then((res)

微信公众号《GIS 数据工程:开始您的 ETL 之旅 》 文章删除及原因

微信公众号多次限制付费文章发布,不太明确其原因。我猜可能是得罪了某位大神,这倒是也不是不可能。我这说话口无遮拦,得罪几个人偶尔搞我一下也是应该的 。当然也可能是部分喜欢白嫖的网友一看我收费就不太高兴,偶尔做点小动作也是有可能的。还有就是平台可能有其它我未知的情况。反正也不猜了,这类问题纠结起来太浪费时间,所以认怂是最好的处理方式。 因此我只能改为线下购买。如有需要线下与我联系。以后

重磅!微信放开公众号注册限制!只要手机号,不用实名!

重磅!微信放开公众号注册限制!只要手机号,不用实名! 随着移动互联网的发展,微信公众号已经成为了许多个人与企业传递信息、分享内容的首选平台。就在近日,微信官方再次放出大招:公众号注册无需实名,只要有手机号就能完成注册!这个改变不仅为个人创造更多机会,也为企业开拓了全新的矩阵传播模式。 🔑 关键词:微信公众号注册、无需实名、矩阵传播 在这篇文章中,我们将深入探讨这一重大政策变化带来的影响和机

人工智能造福公众:未来一片光明

作者:来自 Elastic Peter Dutton 我们如何衡量人工智能对政府的影响?毫无疑问,人工智能将为运营流程和决策带来的好处已被广泛讨论 —— 从自动化工作流程到节省成本再到减少重复工作。 但对于以服务公众为目标的组织来说,人工智能的这些好处不仅限于业务指标,例如效率或收入增长。相反,人工智能带来的潜在效率和成本节约可以开辟空间和资源,用于提供有意义的公共服务,改善全球人民的生活

2024新版霸王餐独立小程序,H5、微信公众号版外系统源码|霸王餐美团/饿了么

“霸王餐”通常指的是一种促销活动,商家为了吸引顾客、增加人气或鼓励顾客给予好评,会提供低于正常价格的优惠,有时甚至免费提供餐食。这种活动可以看作是一种营销策略,旨在通过提供特别优惠来吸引顾客,增加店铺的曝光度和好评率。 霸王餐小程序搭建,运作逻辑: 消费者可以通过登录您提供的霸王餐小程序或公众号来享受优惠餐饮服务,以下是操作流程的简化描述: 1. 定位与首页访问:    - 用户首次登录

微信公众号欢迎大家一起交流,一起分享

天涯何必曾相识,愿与诸君共奋进,2021年迎来了牛年,告别了2020年多灾多难的鼠年,祝福大家,在牛年里,小试牛刀,年气冲天。     欢迎大家,微信扫描,加入一起讨论分享。

有关微信公众平台和html5的想法

在师哥的引导下,我接触了微信公众平台,通过这段时间的感性认识,产生了一个想法就是在微信公众平台上退出一款自己的宠物,可惜技术达不到,现在只能想想而已。不过,在初步了解html5之后,我发现,这并不是不可能实现的事情。 我说下这么想的原因吧,很简单,在微信公众平台上阅读消息,实际上就是通过微信内置的浏览器来实现的。并且自己做的div网页效果,在这个内置的浏览器上能很好的表现出来。另一个原因就是ht

公众号和小程序获取openId不同点

公众号获取openId是在前端先调用一个腾讯的请求地址,传的是当前页面的URL,得到code,让把code给后端服务器,后端根据appId,appSecret和code,去腾讯换取openId。 // 网页授权获取code//public final static String GetPageCode = "https://open.weixin.qq.com/connect/oauth2/a