现在我们大多数人都会或多或少的关注几个公众号,如果发现一个比较合自己胃口的号



对公众号中的文章一定是每篇必读的。

有时候我们关注到宝藏型公众号时发现其历史文章已经好几百甚至上千篇了,而作者又只对其中自己认为比较好的几篇做了索引,我们翻来翻去实在太麻烦了,为了解决这种问题,我决定用 Python 将公众号中文章爬下来。

基本思路

  • 爬取公众号文章列表信息,可获取的信息主要包括文章链接、标题等

  • 利用 wechatsogou 模块根据文章链接获取文章 html 格式信息

爬取

文章爬取我们采用借助公众平台的方式,这种方式虽然简单,但需要我们自己有一个公众号,如果没有公众号可以自己注册一个,公众号的注册也比较简单,这里就不说了。

首先,登录自己的公众号,然后依次进行如下操作



通过上面的操作,我们可以取到 cookie 等信息,我们先将 cookie 写入 txt 文件中,实现代码如下所示:

# 从浏览器中复制出来的 cookie 字符串
cookie_str = "自己的 cookie"
cookie = {}
# 遍历 cookie
for cookies in cookie_str.split("; "):
cookie_item = cookies.split("=")
cookie[cookie_item[0]] = cookie_item[1]
# 将 cookie 写入 txt 文件
with open('cookie.txt', "w") as file:
file.write(json.dumps(cookie))

接着我们获取公众号文章列表信息,代码实现如下所示:

with open("cookie.txt", "r") as file:
cookie = file.read()
cookies = json.loads(cookie)
url = "https://mp.weixin.qq.com"
response = requests.get(url, cookies=cookies)
# 获取token
token = re.findall(r"token=(\d+)", str(response.url))[0]
# 请求头信息
headers = {
"Referer": "https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=10&token=" + token + "&lang=zh_CN",
"Host": "mp.weixin.qq.com",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
}
# 遍历指定页数的文章
for i in range(1, 5, 1):
begin = (i - 1) * 5
# 获取文章列表
requestUrl = "https://mp.weixin.qq.com/cgi-bin/appmsg?action=list_ex&begin="+str(begin)+"&count=5&fakeid=要爬取公众号的fakeid&type=9&query=&token=" + token + "&lang=zh_CN&f=json&ajax=1"
search_response = requests.get(requestUrl, cookies=cookies, headers=headers)
# 获取 JSON 格式的列表信息
re_text = search_response.json()
list = re_text.get("app_msg_list")
# 遍历文章列表
for j in list:
# 文章链接
url = j["link"]
# 文章标题
title = j["title"]
print(url)
# 等待 8 秒,避免请求过于频繁
time.sleep(8)

保存

通过文章列表信息我们可以得到公众号文章链接、标题等信息,接着我们就可以通过 wechatsogou 模块根据文章链接获取文章的 html 格式信息了,模块安装使用 pip install wechatsogou 即可。

这里需要注意一下,我们通过 wechatsogou 模块获取的 html 信息会有一些问题,主要的问题有两个,一是获取文章的 html 信息不全,需要我们自己补一下;另一个是获取的 html 信息可能会有一些 CSS 样式没有带过来,这个问题我们可以先通过浏览器的开发者工具取到样式,然后再手动添加一下就行了。代码实现如下所示:

# url:文章链接,title:文章标题
def save2html(url, title):
# captcha_break_time 为验证码输入错误的重试次数,默认为 1
ws_api = wechatsogou.WechatSogouAPI(captcha_break_time = 3)
content_info = ws_api.get_article_content(url)
html = f'''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{title}</title>
</head>
<link href="my.css" rel="stylesheet" type="text/css" />
<body>
<h2 style="text-align: center;font-weight: 400;">{title}</h2>
{content_info['content_html']}
</body>
</html>
'''
with open(title + '.html', "w", encoding="utf-8") as file:
file.write('%s\n'%html)

上述代码中 my.css 文件存放的就是一些没有带过来的 CSS 样式信息。

用浏览器打开一个公众号文章的 html 文件看一下效果:



通过上面的显示结果,可以看出我们保存的 html 文件的显示效果还算比较好。

如果需要完整代码,微信扫描识别文末二维码,后台回复 200411 即可。

参考:https://mp.weixin.qq.com/s/jGjCfnGdxzK29FgC4E-_Cg

发现了合自己胃口的公众号,但文章太多翻来翻去真麻烦,还好我学了 Python的更多相关文章

  1. python爬搜狗微信获取指定微信公众号的文章

    前言: 之前收藏了一个叫微信公众号的文章爬取,里面用到的模块不错.然而 偏偏报错= =.果断自己写了一个 正文: 第一步爬取搜狗微信搜到的公众号: http://weixin.sogou.com/we ...

  2. 50行Python代码,教你获取公众号全部文章

    > 本文首发自公众号:python3xxx 爬取公众号的方式常见的有两种 - 通过搜狗搜索去获取,缺点是只能获取最新的十条推送文章 - 通过微信公众号的素材管理,获取公众号文章.缺点是需要申请自 ...

  3. 用iframe嵌入了一个微信公众号平台文章的URL

    JS: $.ajaxPrefilter( function (options) { if (options.crossDomain && jQuery.support.cors) { ...

  4. 我创建了一个网站,专门分享公众号的文章 https://asyons.com

    网址:https://asyons.com/,为做个网站,自娱自乐的自明星,但投资也挺大的了,注册了一家公司,公财私章,做账报税,阿里云服务器,全职开发.算上时间价值,按小时,投资过5万了.

  5. 拒绝低效!Python教你爬虫公众号文章和链接

    本文首发于公众号「Python知识圈」,如需转载,请在公众号联系作者授权. 前言 上一篇文章整理了的公众号所有文章的导航链接,其实如果手动整理起来的话,是一件很费力的事情,因为公众号里添加文章的时候只 ...

  6. 微信公众号批量爬取java版

    最近需要爬取微信公众号的文章信息.在网上找了找发现微信公众号爬取的难点在于公众号文章链接在pc端是打不开的,要用微信的自带浏览器(拿到微信客户端补充的参数,才可以在其它平台打开),这就给爬虫程序造成很 ...

  7. 使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

  8. 微信公众号【阿里技术(ali_tech)】历史文章整理

    简介 来自微信公众号: ali_tech 阿里巴巴官方技术号,关于阿里的技术创新均呈现于此. 本内容来自微信公众号的分享,最后更新时间2019-10-26,请关注对应公众号接收最新分享,定期同步地址: ...

  9. 【技巧】如何使用客户端发布BLOG+如何快速发布微信公众号文章

    [技巧]如何使用客户端发布BLOG+如何快速发布微信公众号文章   1  BLOG文档结构图     2  前言部分   2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也 ...

随机推荐

  1. 026.掌握Service-外部访问

    一 集群外部访问 由于Pod和Service都是Kubernetes集群范围内的虚拟概念,所以集群外的客户端默认情况,无法通过Pod的IP地址或者Service的虚拟IP地址:虚拟端口号进行访问.通常 ...

  2. 单列集合List

    1.Vector和ArrayList以及LinkedList区别和联系.应用场景 线程安全: Vector:如果创建Vector时没有指定容量,则默认容量为10,底层基于数组实现,线程是安全的,底层采 ...

  3. Core + Vue 后台管理基础框架3——后端授权

    1.前言 但凡业务系统,授权是绕不开的一环.见过太多只在前端做菜单及按钮显隐控制,但后端裸奔的,觉着前端看不到,系统就安全,掩耳盗铃也好,自欺欺人也罢,这里不做评论.在.NET CORE中,也见过不少 ...

  4. redis 出现(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details

    如果在ubuntu安装的redis含端口使用,但是某些时候常常出现 (error) MISCONF Redis is configured to save RDB snapshots, but is ...

  5. 五分钟学Java:如何才能学好Java Web里这么多的技术

    原创声明 本文作者:黄小斜 转载请务必在文章开头注明出处和作者. 系列文章介绍 本文是<五分钟学Java>系列文章的一篇 本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年 ...

  6. Elasticsearch数据建模笔记

    数据建模 数据建模是创建数据模型的过程 数据模型是对真实世界进行抽象描述的一种工具和方法,实现对现实世界的映射 三个过程:概念模型=>逻辑模型=>数据模型 数据模型:结合具体的数据库,在满 ...

  7. ECNU 计算机系统 (CSAPP) 教材习题作业答案集

    这里是华东师范大学计算机系统的作业答案.由于几乎每一年布置的习题都几乎相同,网上的答案又比较分散,就把自己上学期提交的作业pdf放上来了,供参考. 长这样 Download Link:http://c ...

  8. springBoot mybatis mysql pagehelper layui 分页

    <!-- 加入 pagehelper 分页插件 jar包--><dependency> <groupId>com.github.pagehelper</gro ...

  9. hGame2020第二周第一题题解

    Description: Cosmos通过两个小时速成了PHP+HTML,他信心满满的写了一个博客,他说要从博客后台开始......(flag在根目录, 禁止使用任何扫描器) Challenge Ad ...

  10. 33. CentOS7 静态ip设置

    1.网络连接选择NAT模式: 2.关闭vmware的dhcp:选择编辑-->虚拟网络编辑器,选择VMnet8,去掉使用本地DHCP服务将ip地址分配给虚拟机(D). 3. 点击NAT设置(S)查 ...