日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2024/9/15 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 一键导出微信阅读记录和笔记,666! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者:云外孤鳥?

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

全民閱讀的時(shí)代已經(jīng)來(lái)臨,目前使用讀書軟件的用戶數(shù)2.1億,日活躍用戶超過(guò)500萬(wàn),其中19-35歲年輕用戶占比超過(guò)60%,本科及以上學(xué)歷用戶占比高達(dá)80%,北上廣深及其他省會(huì)城市/直轄市用戶占比超過(guò)80%。

本人習(xí)慣使用微信讀書,為了方便整理書籍和導(dǎo)出筆記,便開發(fā)了這個(gè)小工具。

部分截圖

代碼思路

1. 目錄結(jié)構(gòu)

首先,我們先看一下整體目錄結(jié)構(gòu)

├─?excel_func.py???????????????????讀寫excel文件 ├─?pyqt_gui.py?????????????????????PyQt?GUI界面 └─?wereader.py?????????????????????微信讀書相關(guān)api
  • excel_func.py
    使用xlrd和xlwt庫(kù)對(duì)excel文件進(jìn)行讀寫操作

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

  • wereader.py
    通過(guò)抓包解析獲得相關(guān)api

2. excel_func.py

def?write_excel_xls(path,?sheet_name_list,?value):#?新建一個(gè)工作簿workbook?=?xlwt.Workbook()#?獲取需要寫入數(shù)據(jù)的行數(shù)index?=?len(value)for?sheet_name?in?sheet_name_list:#?在工作簿中新建一個(gè)表格sheet?=?workbook.add_sheet(sheet_name)#?往這個(gè)工作簿的表格中寫入數(shù)據(jù)for?i?in?range(0,?index):for?j?in?range(0,?len(value[i])):sheet.write(i,?j,?value[i][j])#?保存工作簿workbook.save(path)

該函數(shù)的代碼流程為:

  • 創(chuàng)建excel文件

  • 創(chuàng)建表格

  • 往表格寫入數(shù)據(jù)

  • 3. pyqt_gui.py

    class?MainWindow(QMainWindow):def?__init__(self,?*args,?**kwargs):super().__init__(*args,?**kwargs)self.DomainCookies?=?{}self.setWindowTitle('微信讀書助手')?#?設(shè)置窗口標(biāo)題self.resize(900,?600)?#?設(shè)置窗口大小self.setWindowFlags(Qt.WindowMinimizeButtonHint)?#?禁止最大化按鈕self.setFixedSize(self.width(),?self.height())?#?禁止調(diào)整窗口大小url?=?'https://weread.qq.com/#login'?#?目標(biāo)地址self.browser?=?QWebEngineView()?#?實(shí)例化瀏覽器對(duì)象QWebEngineProfile.defaultProfile().cookieStore().deleteAllCookies()?#?初次運(yùn)行軟件時(shí)刪除所有cookiesQWebEngineProfile.defaultProfile().cookieStore().cookieAdded.connect(self.onCookieAdd)?#?cookies增加時(shí)觸發(fā)self.onCookieAdd()函數(shù)self.browser.loadFinished.connect(self.onLoadFinished)?#?網(wǎng)頁(yè)加載完畢時(shí)觸發(fā)self.onLoadFinished()函數(shù)self.browser.load(QUrl(url))?#?加載網(wǎng)頁(yè)self.setCentralWidget(self.browser)?#?設(shè)置中心窗口

    該函數(shù)的代碼流程為:

  • 新建QT窗口

  • 實(shí)例化QWebEngineView對(duì)象

  • 綁定self.onCookieAdd事件

  • 綁定self.onLoadFinished事件

  • 加載網(wǎng)頁(yè)

  • ????#?網(wǎng)頁(yè)加載完畢事件def?onLoadFinished(self):global?USER_VIDglobal?HEADERS#?獲取cookiescookies?=?['{}={};'.format(key,?value)?for?key,value?in?self.DomainCookies.items()]cookies?=?'?'.join(cookies)#?添加Cookie到headerHEADERS.update(Cookie=cookies)#?判斷是否成功登錄微信讀書if?login_success(HEADERS):print('登錄微信讀書成功!')#?獲取用戶user_vidif?'wr_vid'?in?self.DomainCookies.keys():USER_VID?=?self.DomainCookies['wr_vid']print('用戶id:{}'.format(USER_VID))#?關(guān)閉整個(gè)qt窗口self.close()else:print('請(qǐng)掃描二維碼登錄微信讀書...')

    該函數(shù)的代碼流程為:

  • 當(dāng)網(wǎng)頁(yè)加載完畢時(shí),檢測(cè)是否成功登錄微信讀書

  • 如果成功登錄微信讀書,則關(guān)閉QT窗口,開始進(jìn)行數(shù)據(jù)導(dǎo)出

  • 如果失敗登錄微信讀書,則繼續(xù)等待用戶掃描二維碼

  • ????#?添加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})

    該函數(shù)的代碼流程為:

  • 保存微信讀書網(wǎng)址的cookies,以便后續(xù)操作

  • ????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('導(dǎo)出筆記?{}?({}/{})'.format(note_dir?+?book_name?+?'.txt',?index+1,?len(books_finish_read)))

    該函數(shù)的代碼流程為:

  • 調(diào)用write_excel_xls_append函數(shù),保存書籍,并且導(dǎo)出筆記

  • 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():?#?過(guò)濾公眾號(hào)continueb?=?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_readreturn?dict(finishReadBooks=books_finish_read,?recentBooks=books_recent_read,?allBooks=books_all)

    該函數(shù)的代碼流程為:

  • 獲取最近閱讀的書籍、已經(jīng)讀完的書籍、所有書籍

  • 過(guò)濾公眾號(hào)部分

  • 將書籍?dāng)?shù)據(jù)保存為字典格式

  • 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

    該函數(shù)的代碼流程為:

  • 獲取某一本書籍的筆記

  • 將返回的字符串改寫成markdown格式并輸出

  • 如何運(yùn)行

    #?跳轉(zhuǎn)到當(dāng)前目錄 cd?目錄名 #?先卸載依賴庫(kù) pip?uninstall?-y?-r?requirement.txt #?再重新安裝依賴庫(kù) pip?install?-r?requirement.txt?-i?https://pypi.tuna.tsinghua.edu.cn/simple #?開始運(yùn)行 python?pyqt_gui.py END 來(lái)和小伙伴們一起向上生長(zhǎng)呀~~~ 掃描下方二維碼,添加小詹微信,可領(lǐng)取千元大禮包并申請(qǐng)加入 Python學(xué)習(xí)交流群,群內(nèi)僅供學(xué)術(shù)交流,日常互動(dòng),如果是想發(fā)推文、廣告、砍價(jià)小程序的敬請(qǐng)繞道!一定記得備注「交流學(xué)習(xí)」,我會(huì)盡快通過(guò)好友申請(qǐng)哦!(添加人數(shù)較多,請(qǐng)耐心等待)(掃碼回復(fù) 1024? 即可領(lǐng)取IT資料包)

    總結(jié)

    以上是生活随笔為你收集整理的Python 一键导出微信阅读记录和笔记,666!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 麻豆天天躁天天揉揉av | 轻轻色在线观看 | 日韩中文字幕免费在线观看 | 亚洲精品免费在线 | 色妇av| 一区二区一级片 | 亚洲精品国产视频 | 桃花久久 | 国产激情毛片 | 国产日韩欧美激情 | 国产三级精品三级在线 | 黄色一级大片在线免费看国产 | 亚洲精品视频在线免费 | 5月婷婷6月丁香 | 国产欧美精品一区二区在线播放 | 国产女同在线观看 | 欧美少妇一区二区三区 | 极品尤物在线观看 | 午夜宫| 拔插拔插影库 | 91av久久久| 国产特黄大片aaaa毛片 | 国产无码日韩精品 | 成av人在线 | 少妇高潮av久久久久久 | 91导航 | 在线看黄免费 | 国产精品久久久久久亚洲毛片 | xxx综合网| 亚洲一区二区免费在线观看 | 亚洲黄色影院 | 浓精喷进老师黑色丝袜在线观看 | 亚洲天堂麻豆 | jizz欧美| 激情导航| 免费在线观看黄网 | 免费激情片 | www.成人免费视频 | 亚洲精品字幕在线 | 免费av影片| 中文字幕不卡在线 | 美女午夜激情 | www国产成人 | 日日夜夜爱爱 | 亚洲狼人干 | av激情在线 | 720url在线观看免费版 | 免费看黄20分钟 | 欧美大片免费在线观看 | 在线观看国产精品一区 | 久久久毛片 | 国产成人精品二区三区亚瑟 | 日本视频免费观看 | 色呦在线| av私库在线观看 | 日本熟妇人妻中出 | 婷婷色中文 | 有码一区 | 日本三级日本三级日本三级极 | 91看视频 | 特黄色大片 | 色婷婷在线播放 | 欧美综合自拍 | 啪啪综合 | 国模av在线 | 人妻一区二区在线 | 好吊色青青草 | 精品久久久久久无码中文野结衣 | 风流还珠之乱淫h文 | 中文字幕第一页在线视频 | 欧美日韩成人在线视频 | 老熟女毛茸茸浓毛 | 精品无码人妻少妇久久久久久 | 亚洲日日夜夜 | 成人国产精品免费观看动漫 | 少妇做爰免费视频播放 | 日本免费看 | 欧美少妇18p | 日韩精品人妻中文字幕 | 久久久久免费精品视频 | 亚洲va国产va天堂va久久 | 91黄色免费视频 | 亚洲小说区图片区 | 亚洲欧美另类图片 | 国产精品久久久久久中文字 | 黄色片hd | 欧美用舌头去添高潮 | 最近最新最好看的2019 | 成年人黄色免费视频 | 久久99国产综合精品免费 | 东北少妇不带套对白 | 国产精品成人一区二区三区电影毛片 | 色综合社区 | 国产日本欧美在线观看 | 无码乱人伦一区二区亚洲 | 青青操青青 | 无码少妇一区二区三区 | 特黄特色特刺激免费播放 | 偷偷在线观看免费高清av |