微信不提供公众号分组管理,部分公众号内容优质但更新频率低,我们通过抓取特定公众号更新解决这个问题。
网上介绍的方法较多,参考各位大神的文章后,最后选择了通过公众号管理平台抓取的方法。

大体思路:

  • 通过公众号管理平台对文章名称、更新时间、文章链接等信息进行抓取;
  • 结果存入mysql数据库备用;
  • 读取mysql数据生成html,通过flask提供web服务供局域网内浏览器使用。

其中,参数中的 cookie、token 需在抓取前手动更新;fakeid 需手工获取一次即可。

步骤如下:

1准备:

注册公众号,以登录公众号平台 mp.weixin.qq.com。

2 mysql 中建两个表

表1: accountlist,用于存储待抓取公众号的名称和fakeid:

  • nickname:公众号名称

  • fakeid:公众号 fakeid

表2:wechat_article,用于存储抓取公众号得到的信息,包括

  • title:公众号的文章名
  • nickname: 公众号名称
  • update_time:文章的更新时间
  • link: 文章链接
  • fakeid:公众号fakeid

3 抓取文章并存储

代码如下:

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# '''
# @File    :   test.py
# @Time    :   2022/03/24
# @Author  :   疾风jf
# '''
# import pymysql
from dbutils.pooled_db import PooledDB
import time
import requests
import randomPOOL = PooledDB(creator=pymysql, host='127.0.0.1',port=3306,user='root',password= yourpassword, # 输入数据库密码database='testdb', # 数据库名charset='utf8')# 毫秒转化为日期
def getDate(times):timearr = time.localtime(times)date = time.strftime("%Y-%m-%d %H:%M:%S", timearr)return date #读fakeid
def listWeChatFilId():conn = POOL.connection()cursor = conn.cursor()cursor.execute("select fakeid from accountlist") # 从表accountlist读fakeidresult = cursor.fetchall()cursor.close()conn.close()return result# 爬取的文章存入数据库
def saveWeChatArticle(dict):conn = POOL.connection()cursor = conn.cursor()sql = "insert ignore into wechat_article (`title`, `update_time`, `link`, `fakeid`) values(\"%s\",\"%s\",\"%s\",\"%s\")" % (str(dict[0]), str(dict[1]), str(dict[2]), str(dict[3])) #sql 是字符串;因此变量s%处,用转义字符 \" 输入双引号,后面,用str 将每个值转为str类型;cursor.execute(sql)conn.commit() # 提交到数据库cursor.close()conn.close# 更新数据库的nickname
def updatenickname():conn = POOL.connection()cursor = conn.cursor()sql = """UPDATE wechat_article, wechat_publicSET wechat_article.nickname = accountlist.nicknameWHERE wechat_article.fakeid = accountlist.fakeid"""try:cursor.execute(sql)conn.commit()except:conn.rollback()cursor.close()conn.close()# 爬取文章,并调用函数存入数据库
def listAllArticle(fakeId):url = "https://mp.weixin.qq.com/cgi-bin/appmsg"headers = {"Cookie": "your cookie", #手动更新"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.81 Safari/537.36",}data = {"token": "your token",  # 手动更新"lang": "zh_CN","f": "json","ajax": "1","action": "list_ex","begin": "0","count": "5","query": "","fakeid": fakeId,   # fakeid 从表 accountlist 里自动获取"type": "9",}for i in range(2):data["begin"] = i * 5# 睡3-10秒再爬(随机取)sleepTime = random.randint(3, 10)   print(sleepTime)time.sleep(sleepTime)#爬,返回结果存content_jsoncontent_json = requests.get(url, headers=headers, params=data).json()#从content_json(dict类型)中提取数据。for item in content_json["app_msg_list"]:   items = [item["title"], getDate(item["update_time"]), item["link"], ''.join(fakeId)]print(items)saveWeChatArticle(items)  # 调用 savewechatarticle() 存入数据库if __name__ == '__main__':listFakeId = listWeChatFilId()    # 取fakeId的值for i in listFakeId: # 取fakeid,爬取文章信息listAllArticle(i)  updatenickname()    # 更新表中的nickname (公众号名称)

4 注意事项

  • 运行时,需登录公众号后台;
  • 重新登录后台,cookie 和 token 会变,爬取前需要手动更新;
  • 表 accountlist 需手动维护。fakeid 需要手动添加到accountlist,但不用每次更新。

5.生成flask web服务,代码如下:

D:\yourproject
├─app.py
├─templates
│ └─index.html

app.py

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# '''
# @File    :   app.py
# @Time    :   2022/03/24
# @Author  :   疾风jf
# '''
# 数据库读取wechat文章,传给flask服务器上index.html
#import pymysql
from dbutils.pooled_db import PooledDB
from flask import Flask, render_template
from gevent import pywsgiPOOL = PooledDB(creator=pymysql, host='127.0.0.1',port=3306,user='root',password= yourpassword, # 输入数据库密码database='testdb', # 数据库名charset='utf8')app = Flask(__name__)
@app.route('/')def index():conn=POOL.connection()cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql=""" SELECT DISTINCT title,nickname,update_time,link FROM wechat_article ORDER BY update_time DESClimit 100"""cursor.execute(sql)result = cursor.fetchall()cursor.close()conn.close()return render_template('index.html',result=result)if __name__ == '__main__':server = pywsgi.WSGIServer(('0.0.0.0',5000),app) # host选0.0.0.0,可用局域网ip访问;如果选localhost,就本机访问。server.serve_forever()

index.htm里乞丐版表格输出,参考如下:

<!doctype html>
<html lang="en"><head><!-- Required meta tags --><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Hello, world!</title><style> .table11_6 table {width:100%;margin:15px 0;border:0;}.table11_6 th {background-color:#96C7ED;color:#000000}.table11_6,.table11_6 th,.table11_6 td {font-size:0.95em;text-align:left;padding:4px;border-collapse:collapse;}.table11_6 th,.table11_6 td {border: 1px solid #73b4e7;border-width:1px 0 1px 0;border:2px inset #ffffff;}.table11_6 tr {border: 1px solid #ffffff;}.table11_6 tr:nth-child(odd){background-color:#dcecf9;}.table11_6 tr:nth-child(even){background-color:#ffffff;}</style></head><body bgcolor="#fdfcf8"> <h2>Hello, world!</h2>{% block page_content %}<table class=table11_6 align="center" width="100%"><caption>文章列表</caption><tr align="center"><th>title</th><th>nickname</th><th>update_time</th><th>link</th></tr>{% for item in result %}<tr><td><a href=" {{ item['link'] }} " target="_blank"> {{ item['title'] }} </a>  </td><td>{{ item['nickname'] }}</td><td>{{ item['update_time'] }}</td><td><a href=" {{ item['link'] }} ">link</a></td></tr>{% endfor %}</table>{% endblock %}<br><br><br></body>
</html>

6,运行app.py后, 浏览器打开http://your_local_ip:5000, 应能访问。
效果图:

7 批处理
也可直接用批处理运行app.py,
新建app.bat

@echo off
cd D:\yourproject\
python app.py

Python 爬取公众号文章链接并生成html相关推荐

  1. python爬取公众号文章如何获取发布时间

    python爬取公众号文章如何获取发布时间 在上一篇爬取公众号的文章中爬虫如何爬取微信公众号文章介绍了如何获取公众号的所有历史文章链接,但当我根据链接去爬取文章的时候,却遇到了一个小问题,就是文章的发 ...

  2. 如何用python爬取公众号文章_Python+fiddler:爬取微信公众号的文章

    这几天师父有个小项目,挺有意思,如何使用python爬微信公众号中的新闻信息.大体流程如下.图1:流程 其实我们看到,这里并没有想象中的"智能"--依然需要手动刷公众号文章,然后才 ...

  3. 如何用python爬取公众号文章搜狗微信搜索_python如何爬取搜狗微信公众号文章永久链接的思路解析...

    这篇文章主要介绍了python如何爬取搜狗微信公众号文章永久链接的思路解析 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧. 本文主要讲解思路,代码部分请自行解决搜狗微信 ...

  4. 如何用python爬取公众号文章_如何使用 Python 爬取微信公众号文章

    我比较喜欢看公众号,有时遇到一个感兴趣的公众号时,都会感觉相逢恨晚,想一口气看完所有历史文章.但是微信的阅读体验挺不好的,看历史文章得一页页的往后翻,下一次再看时还得重复操作,很是麻烦. 于是便想着能 ...

  5. 如何用python爬取公众号文章搜狗微信搜索_python抓取搜狗微信公众号文章

    初学python,抓取搜狗微信公众号文章存入mysql mysql表: 代码: import requests import json import re import pymysql # 创建连接 ...

  6. python爬取公众号文章_python爬取微信公众号历史文章

    前几天,朋友有一个爬取某些指定微信公众号的历史文章的需求,刚好自己闲的没事,也就试了一试.不算完美解决问题了吧,但是自己也无能为力了,毕竟腾讯那么牛,斗不过斗不过. 一.思路 看了一些别人的文章,综合 ...

  7. python爬取公众号文章数据库,爬取微信公众号所有文章的请教

    废话还是少说直接上代码: __biz=MzA3ODA5NjgyOA uin=MjM3ODE4ODcxMg key=7b81aac53bd2393d5e902e058ff64404320d0d6b983 ...

  8. python爬取公众号文章发布时间

    使用xpath取出来的是空,爬取到本地的html,时间的标签如下,内容也是是空的 <em id="publish_time" class="rich_media_m ...

  9. 用python爬取公众号推送图片并保存为PPT

    文章目录 一.前言 二.开始 (一)获取推送URL链接 (二)爬取网页并提取图片保存 1.定义用于爬取推送图片的PictureSpider类 2.定义get_url_text()方法 3.定义sear ...

最新文章

  1. android gradle 设置 output文件名,如何使用gradle在APK文件名中设置versionName?
  2. JAVASCRIPT C# 相互访问
  3. Flask - app的配置和实例化Flask的参数
  4. 图结构练习——判断给定图是否存在合法拓扑序列
  5. 安装composer
  6. 持续集成工具集之一 Jenkins简介
  7. python怎么读-Python中怎么读写文件
  8. 【[小说/游戏]设定】The Dreamy World 夢世界
  9. Should I design my classes from the outside (interfaces first) or from the inside (data first)?
  10. 聊一聊Android的第三方开发组件
  11. linux常用网络命令大全
  12. 16种常用的数据分析方法-相关分析
  13. Allegro更新铜皮方法
  14. PCB制造常用的13种测试方法,你了解几种?
  15. 了解区块链(一)——加密货币以及区块链的价值
  16. autojs之酷炫字体效果
  17. yolov5 代码内容解析
  18. 转载自科技猿人:联想5G投票这事,我们就来彻底讲清楚
  19. ACL-IJCAI-SIGIR顶级会议论文报告会(AIS 2022)笔记2:分析与可解释性
  20. elasticsearch压力测试工具之ESrally使用说明

热门文章

  1. gmail无法访问问题解决--FGW
  2. PHP Fatal Error Unable to open base address file
  3. akka学习教程(十三) akka分布式
  4. 英伟达TX2烧录系统_英伟达的DPU,是想在数据中心奇袭英特尔?
  5. MATLAB如何识别吸附——不同时间内的吸附量识别
  6. 本人对12306系统优化的一点建议
  7. 数据仓库项目——数据准备
  8. 汇编指令msr_ARM汇编:MRS和MSR指令
  9. 滕云:DDD实现之路
  10. 双十一豪礼,120份专属礼品免费送!