Python 实战 | 一键导出微信阅读记录和笔记

一键导出微信读书的书籍笔记 一键导出微信读书的书籍笔记 简介 全民阅读的时代已经来临,目前使用读书软件的用户数2.1亿,日活跃用户超过500万,其中19-35岁年轻用户占比超过60%,本科及以上学历用户占比高达80%,北上广深及其他省会城市/直辖市用户占比超过80%。本人习惯使用微信读书,为了方便整理书籍导出笔记,便开发了这个小工具。 部分截图 代码思路 1. 目录结构 首先,我们先看一下整体目录结构... 阅读详情

点击上方“编程派”,选择设为“设为星标”

优质文章,第一时间送达!

作者:云外孤鸟 

出处:https://www.cnblogs.com/cloudbird/p/12683546.html

全民阅读的时代已经来临,目前使用读书软件的用户数2.1亿,日活跃用户超过500万,其中19-35岁年轻用户占比超过60%,本科及以上学历用户占比高达80%,北上广深及其他省会城市/直辖市用户占比超过80%。

本人习惯使用微信读书,为了方便整理书籍和导出笔记,便开发了这个小工具。

部分截图

代码思路

1. 目录结构

首先,我们先看一下整体目录结构

├─ excel_func.py                   读写excel文件
├─ pyqt_gui.py                     PyQt GUI界面
└─ wereader.py                     微信读书相关api
  • excel_func.py
    使用xlrd和xlwt库对excel文件进行读写操作

  • pyqt_gui.py
    使用PyQt绘制GUI界面

  • wereader.py
    通过抓包解析获得相关api

2. excel_func.py
def write_excel_xls(path, sheet_name_list, value):
    # 新建一个工作簿
    workbook = xlwt.Workbook()

    # 获取需要写入数据的行数
    index = len(value)

    for sheet_name in sheet_name_list:

        # 在工作簿中新建一个表格
        sheet = workbook.add_sheet(sheet_name)

        # 往这个工作簿的表格中写入数据
        for i in range(0, index):
            for j in range(0, len(value[i])):
                sheet.write(i, j, value[i][j])

    # 保存工作簿
    workbook.save(path)

该函数的代码流程为:

  1. 创建excel文件

  2. 创建表格

  3. 往表格写入数据

3. pyqt_gui.py
class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.DomainCookies = {}

        self.setWindowTitle('微信读书助手') # 设置窗口标题
        self.resize(900, 600) # 设置窗口大小
        self.setWindowFlags(Qt.WindowMinimizeButtonHint) # 禁止最大化按钮
        self.setFixedSize(self.width(), self.height()) # 禁止调整窗口大小

        url = 'https://weread.qq.com/#login' # 目标地址
        self.browser = QWebEngineView() # 实例化浏览器对象

        QWebEngineProfile.defaultProfile().cookieStore().deleteAllCookies() # 初次运行软件时删除所有cookies

        QWebEngineProfile.defaultProfile().cookieStore().cookieAdded.connect(self.onCookieAdd) # cookies增加时触发self.onCookieAdd()函数
        self.browser.loadFinished.connect(self.onLoadFinished) # 网页加载完毕时触发self.onLoadFinished()函数

        self.browser.load(QUrl(url)) # 加载网页
        self.setCentralWidget(self.browser) # 设置中心窗口

该函数的代码流程为:

  1. 新建QT窗口

  2. 实例化QWebEngineView对象

  3. 绑定self.onCookieAdd事件

  4. 绑定self.onLoadFinished事件

  5. 加载网页

    # 网页加载完毕事件
    def onLoadFinished(self):

        global USER_VID
        global HEADERS

        # 获取cookies
        cookies = ['{}={};'.format(key, value) for key,value in self.DomainCookies.items()]
        cookies = ' '.join(cookies)
        # 添加Cookie到header
        HEADERS.update(Cookie=cookies)

        # 判断是否成功登录微信读书
        if login_success(HEADERS):
            print('登录微信读书成功!')

            # 获取用户user_vid
            if 'wr_vid' in self.DomainCookies.keys():
                USER_VID = self.DomainCookies['wr_vid']
                print('用户id:{}'.format(USER_VID))

                # 关闭整个qt窗口
                self.close()

        else:
            print('请扫描二维码登录微信读书...')

该函数的代码流程为:

  1. 当网页加载完毕时,检测是否成功登录微信读书

  2. 如果成功登录微信读书,则关闭QT窗口,开始进行数据导出

  3. 如果失败登录微信读书,则继续等待用户扫描二维码

    # 添加cookies事件
    def onCookieAdd(self, cookie):
        if 'weread.qq.com' in cookie.domain():
            name = cookie.name().data().decode('utf-8')
            value = cookie.value().data().decode('utf-8')
            if name not in self.DomainCookies:
                self.DomainCookies.update({name: value})

该函数的代码流程为:

  1. 保存微信读书网址的cookies,以便后续操作

    books = get_bookshelf(USER_VID, HEADERS) # 获取书架上的书籍
    books_finish_read = books['finishReadBooks']
    books_recent_read = books['recentBooks']
    books_all = books['allBooks']
    write_excel_xls_append(data_dir + '我的书架.xls', '已读完的书籍', books_finish_read) # 追加写入excel文件
    write_excel_xls_append(data_dir + '我的书架.xls', '最近阅读的书籍', books_recent_read)  # 追加写入excel文件
    write_excel_xls_append(data_dir + '我的书架.xls', '所有的书籍', books_all)  # 追加写入excel文件

    # 获取书架上的每本书籍的笔记
    for index, book in enumerate(books_finish_read):
        book_id = book[0]
        book_name = book[1]
        notes = get_bookmarklist(book[0], HEADERS)

        with open(note_dir + book_name + '.txt', 'w') as f:
            f.write(notes)
        print('导出笔记 {} ({}/{})'.format(note_dir + book_name + '.txt', index+1, len(books_finish_read)))


该函数的代码流程为:

  1. 调用write_excel_xls_append函数,保存书籍,并且导出笔记

4. wereader.py
def get_bookshelf(userVid, headers):
    """获取书架上所有书"""
    url = "https://i.weread.qq.com/shelf/friendCommon"
    params = dict(userVid=userVid)
    r = requests.get(url, params=params, headers=headers, verify=False)
    if r.ok:
        data = r.json()
    else:
        raise Exception(r.text)

    books_finish_read = set() # 已读完的书籍
    books_recent_read = set() # 最近阅读的书籍
    books_all = set() # 书架上的所有书籍


    for book in data['recentBooks']:
        if not book['bookId'].isdigit(): # 过滤公众号
            continue
        b = Book(book['bookId'], book['title'], book['author'], book['cover'], book['intro'], book['category'])
        books_recent_read.add(b)

    books_all = books_finish_read + books_recent_read

    return dict(finishReadBooks=books_finish_read, recentBooks=books_recent_read, allBooks=books_all)

该函数的代码流程为:

  1. 获取最近阅读的书籍、已经读完的书籍、所有书籍

  2. 过滤公众号部分

  3. 将书籍数据保存为字典格式

def get_bookmarklist(bookId, headers):
    """获取某本书的笔记返回md文本"""
    url = "https://i.weread.qq.com/book/bookmarklist"
    params = dict(bookId=bookId)
    r = requests.get(url, params=params, headers=headers, verify=False)

    if r.ok:
        data = r.json()
        # clipboard.copy(json.dumps(data, indent=4, sort_keys=True))
    else:
        raise Exception(r.text)
    chapters = {c['chapterUid']: c['title'] for c in data['chapters']}
    contents = defaultdict(list)

    for item in sorted(data['updated'], key=lambda x: x['chapterUid']):
        # for item in data['updated']:
        chapter = item['chapterUid']
        text = item['markText']
        create_time = item["createTime"]
        start = int(item['range'].split('-')[0])
        contents[chapter].append((start, text))

    chapters_map = {title: level for level, title in get_chapters(int(bookId), headers)}
    res = ''
    for c in sorted(chapters.keys()):
        title = chapters[c]
        res += '#' * chapters_map[title] + ' ' + title + '\n'
        for start, text in sorted(contents[c], key=lambda e: e[0]):
            res += '> ' + text.strip() + '\n\n'
        res += '\n'

    return res

该函数的代码流程为:

  1. 获取某一本书籍的笔记

  2. 将返回的字符串改写成markdown格式并输出

如何运行

# 跳转到当前目录
cd 目录名
# 先卸载依赖库
pip uninstall -y -r requirement.txt
# 再重新安装依赖库
pip install -r requirement.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 开始运行
python pyqt_gui.py

补充

完整版源代码存放在github上,有需要的请点击这里下载

PyCharm 2020.1 稳定版发布

pip install 今年将出现重大变化!

入坑 Python 后强烈推荐的一套工具库

实战:Flask + Vue 生成漂亮的词云

Github 热门,程序员想拿高薪建议都看看

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版
回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版
回复关键词「m」,立即获取Python精选优质文章合集
回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~
题图:pexels,CC0 授权。

好文章,我在看❤️
微信读书爬虫 wereader 微信读书爬虫 wereader 作者 @arry-lee github 地址:https://github.com/arry-lee/wereader 主要功能 获取书架上的书籍列表 get_bookshelf 获取某本书的详情 get_bookinfo 获取某本书的目录 get_chapters 获取某本书你的全部笔记 get_bookmarklist 获取你的所有有笔记本书单 get_not... 阅读详情

相关推荐

Python实战一键导出微信读书的书籍笔记

全民阅读的时代已经来临,目前使用读书软件的用户数2.1亿,日活跃用户超过500万,其中19-35岁年轻用户占比超过60%,本科及以上学历用户占比高达80%,北上广深及其他省会城市/直辖市用户占比超过80%。 本人习惯使用微信读书,为了方便整理书籍导出笔记,便开发了这个小工具 部分截图 代码思路 1、目录结构 首先,我们先看一下整体目录结构 Code ├─ excel_func.py ...

wulishinian的博客 4400

PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解

简介: 分析接口知道要获取文章阅读点赞数必须有keyuin这两个关键参数,不同公众号key不一样(据说有万能微信key,不懂怎么搞到),同一个公众号key大概半小时会过期 提交链接获取文章阅读量api 思路: 1.将客户端请求阅读量接口的请求拦截转发到自己服务器,这样就可以获取到key ,用__biz关联缓存半小时 2.提交文章链接进行查询时,服务器从文章链接里获取__biz,查询是否缓存了当前公众号对应的key,有的话进行第3步,没有进行第4步。 3.curl请求https://mp.weixin.qq.com/mp/getappmsgext? 接口获取数据 4.key不存在时,通知客

Python 一键导出微信阅读记录笔记

全民阅读的时代已经来临,目前使用读书软件的用户数2.1亿,日活跃用户超过500万,其中19-35岁年轻用户占比超过60%,本科及以上学历用户占比高达80%,北上广深及其他省会城市/直辖市用户占比超过80%。 本人习惯使用微信读书,为了方便整理书籍导出笔记,便开发了这个小工具。 代码思路 1. 目录结构 首先,我们先看一下整体目录结构 ├─ excel_func.py 读写excel文件 ├─ pyqt_gui.py

爬遍所有网站 1120

微信读书API分析

现有微信读书相关开源项目概述 微信读书提供了大量正版图书,全文可复制、标注便利,支持移动PC两大平台。所以近几年一直使用微信读书看书,并对大量图书做了批注,但是微信读书不支持导出批注。在github搜下了,发现了三个比较好的项目,他们对微信读书API已经做了很多探索。 @arry-lee 的wereader项目,地址:https://github.com/arry-lee/wereader 该项目是最早解释微信读书API的项目,具有以下特点: 第一次运行需要粘贴微信读书的cookie字符串。这就需要

mighty13的专栏 4万+

实战 | 一键导出微信阅读记录笔记

点击上方“逆锋起笔”,关注领取视频教程☞ 程序员进阶必备资源免费送「各种技术!」 ☜作者:云外孤鸟出处:https://www.cnblogs.com/cloudbird/p/1268...

code小生 1359

Python 一键导出微信阅读记录笔记!光明正大看女友聊天记录

全民阅读的时代已经来临,目前使用读书软件的用户数2.1亿,日活跃用户超过500万,其中19-35岁年轻用户占比超过60%,本科及以上学历用户占比高达80%,北上广深及其他省会城市/直辖市用户占比超过80%。 本人习惯使用微信读书,为了方便整理书籍导出笔记,便开发了这个小工具。 部分截图 代码思路 1. 目录结构 首先,我们先看一下整体目录结构 ├─ excel_func.p...

爬遍所有网站 2633

Python 一键导出微信阅读记录笔记,666!

作者:云外孤鸟出处:https://www.cnblogs.com/cloudbird/p/12683546.html全民阅读的时代已经来临,目前使用读书软件的用户数2.1亿,日活跃用...

小詹学python的博客 379

微信读书助手wereader:5分钟掌握高效阅读笔记管理技巧

微信读书助手wereader是一款专为微信读书用户设计的桌面应用程序,能够帮助你高效管理读书笔记、智能推荐优质书籍,并实现阅读内容的系统化整理。这款开源工具通过简洁的图形界面,让你轻松将微信读书中的笔记导出为Markdown格式,建立个人知识库,提升阅读效率学习效果。 ## 📊 项目亮点速览 ✨ **核心功能特色** - **智能书籍推荐**:自动分析微信读书平台数据,为你推荐热门书籍

gitblog_01072的博客 707

微信读书数据导出与自动化备份:开源工具wechat-reader实战指南

数据同步与自动化是提升个人数字资产管理效率的核心技术。其原理在于通过程序化手段,在不同系统或平台间建立安全、稳定的数据传输通道,实现信息的定向流动与持久化存储。这项技术的价值在于打破信息孤岛,赋予用户对自身数据的完全控制权与再处理能力,是构建个人知识体系与进行量化自我分析的基础。在实践层面,Python因其丰富的生态库(如requests、pandas)成熟的自动化框架,成为实现此类功能的常见选择,广泛应用于爬虫、数据清洗与定时任务等场景。具体到阅读领域,许多用户希望将封闭平台内的阅读行为、笔记等数据资产

weixin_30471561的博客 391

提升阅读体验:wereader的阅读模式与笔记模式切换技巧

微信读书助手wereader是一个功能全面的微信读书笔记工具,它能够帮助用户在阅读笔记管理之间无缝切换。这款工具通过智能的阅读模式与笔记模式切换功能,让阅读体验更加流畅高效。本文将详细介绍如何利用wereader提升你的阅读效率,掌握两种模式的切换技巧。 ## 🚀 为什么需要阅读模式与笔记模式? 在数字化阅读时代,我们经常需要在阅读内容记录笔记之间来回切换。传统的阅读方式要么打断阅读流程

gitblog_01040的博客 1019

微信读书笔记助手:如何用Python桌面应用重塑你的数字阅读体验

你是否曾在微信读书中划下无数精彩段落,却苦于无法系统整理?是否在阅读技术文档时渴望一个更高效的笔记管理工具?今天,我们将探索一款名为wereader的开源桌面应用,它正在重新定义数字阅读的边界。 ## 从碎片化到系统化:一个阅读者的真实痛点 在数字阅读时代,我们每天都在微信读书上积累着宝贵的知识片段。然而,这些零散的笔记往往散落在不同书籍中,难以形成体系。更令人困扰的是,技术文档的阅读体验与普

gitblog_01038的博客 1058

3步掌握微信读书助手:高效管理阅读笔记的完整指南

微信读书助手wereader是一款专为微信读书用户设计的桌面应用工具,它能够帮助你系统整理读书笔记、管理阅读进度,并通过智能推荐功能发现优质书籍。无论你是技术爱好者还是普通读者,这款工具都能让你的阅读体验更加高效有序。 ## 入门篇:快速启动与基础配置 ### 环境准备与安装步骤 要开始使用微信读书助手,你需要先准备好Python环境。确保系统已安装Python 3.7及以上版本,这是运行we

gitblog_00943的博客 996

怎样5分钟掌握微信读书笔记助手:终极高效阅读技巧指南

微信读书笔记助手wereader是一款专为微信读书用户设计的桌面应用工具,能够帮助读者系统整理读书笔记、管理阅读进度,并通过智能推荐功能发现优质书籍。这款强大的微信读书笔记助手让知识管理变得简单高效,特别适合需要系统整理阅读笔记的用户。 你知道吗?每次阅读完一本书,那些精彩的段落重要的知识点很快就消失在记忆的海洋中?想象一下,如果有一个工具能帮你自动整理所有读书笔记,还能智能推荐新书,那该多好

gitblog_00415的博客 1071

wechat-dump实战指南:3分钟快速导出微信聊天记录为HTML

微信聊天记录包含了我们重要的沟通回忆珍贵信息,但微信官方并没有提供方便的导出功能。wechat-dump是一款免费、开源的强力工具,专门用于从Android设备分析导出微信聊天记录,并将其转换为易读的HTML格式,让你能够轻松备份、查看分析所有聊天内容。 ## 🎯 项目概述:你的微信聊天记录备份专家 wechat-dump是一个专为Android微信用户设计的聊天记录导出工具,它能够:

gitblog_01070的博客 373
上一篇: 影响力最大的 Python 开发者大会改为线上分享啦!
下一篇: 一个困扰我两年的 Flask bug
codingpy
博客等级 码龄11年 1745粉丝 104原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值