用python寫PDF轉換器的實現(xiàn)
前言
某個夜深人靜的夜晚,夜微涼風微揚,月光照進我的書房~
當我打開文件夾以回顧往事之余,驚現(xiàn)許多看似雜亂的無聊代碼。我拍腿正坐,一個想法油然而生:“生活已然很無聊,不如再無聊些叭”。
于是,我決定開一個專題,便稱之為kimol君的無聊小發(fā)明。
妙…啊~~~
想必小伙伴都經歷過,當你想要把PDF轉為WORD時,自己打字赫赫甩在你眼前:
不充錢就想白嫖?? 想得美~
然而,kimol君是不會退縮的,畢竟迎難而上是傳統(tǒng)美德。于是,今天的主題出來了:用python寫一個PDF轉WORD的小工具(基于某網站接口)。
一、思路分析
網上一搜,你可以發(fā)現(xiàn)很多PDF轉換的工具,其中不乏在線轉換的網站,比如這樣的:
那么,通過網站提供的測試接口,我們便可以通過爬蟲模擬的方式實現(xiàn)轉換。
沒有錯了~思路就是如此的簡單明了,今天的主角便是:https://app.xunjiepdf.com
通過抓包分析,知道這是一個POST請求,接下來用requests庫模擬即可。
需要注意的是,這個接口僅用于測試,所以可供轉換的頁面等都有所限制,如需更完整的功能還請支持原版。
二、我的代碼
正所謂一萬個coders,就有一萬種codes,以下為我的代碼,僅供參考。
導入相關庫:
import time import requests
定義PDF2Word類:
class PDF2Word(): def __init__(self): self.machineid = 'ccc052ee5200088b92342303c4ea9399' self.token = '' self.guid = '' self.keytag = '' def produceToken(self): url = 'https://app.xunjiepdf.com/api/producetoken' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} data = {'machineid':self.machineid} res = requests.post(url,headers=headers,data=data) res_json = res.json() if res_json['code'] == 10000: self.token = res_json['token'] self.guid = res_json['guid'] print('成功獲取token') return True else: return False def uploadPDF(self,filepath): filename = filepath.split('/')[-1] files = {'file': open(filepath,'rb')} url = 'https://app.xunjiepdf.com/api/Upload' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/pdf', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} params = ( ('tasktype', 'pdf2word'), ('phonenumber', ''), ('loginkey', ''), ('machineid', self.machineid), ('token', self.token), ('limitsize', '2048'), ('pdfname', filename), ('queuekey', self.guid), ('uploadtime', ''), ('filecount', '1'), ('fileindex', '1'), ('pagerange', 'all'), ('picturequality', ''), ('outputfileextension', 'docx'), ('picturerotate', '0,undefined'), ('filesequence', '0,undefined'), ('filepwd', ''), ('iconsize', ''), ('picturetoonepdf', ''), ('isshare', '0'), ('softname', 'pdfonlineconverter'), ('softversion', 'V5.0'), ('validpagescount', '20'), ('limituse', '1'), ('filespwdlist', ''), ('fileCountwater', '1'), ('languagefrom', ''), ('languageto', ''), ('cadverchose', ''), ('pictureforecolor', ''), ('picturebackcolor', ''), ('id', 'WU_FILE_1'), ('name', filename), ('type', 'application/pdf'), ('lastModifiedDate', ''), ('size', ''),) res= requests.post(url,headers=headers,params=params,files=files) res_json = res.json() if res_json['message'] == '上傳成功': self.keytag = res_json['keytag'] print('成功上傳PDF') return True else: return False def progress(self): url = 'https://app.xunjiepdf.com/api/Progress' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': 'text/plain, */*; q=0.01', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} data = { 'tasktag': self.keytag, 'phonenumber': '', 'loginkey': '', 'limituse': '1'} res= requests.post(url,headers=headers,data=data) res_json = res.json() if res_json['message'] == '處理成功': print('PDF處理完成') return True else: print('PDF處理中') return False def downloadWord(self,output): url = 'https://app.xunjiepdf.com/download/fileid/%s'%self.keytag res = requests.get(url) with open(output,'wb') as f: f.write(res.content) print('PDF下載成功("%s")'%output) def convertPDF(self,filepath,outpath): filename = filepath.split('/')[-1] filename = filename.split('.')[0]+'.docx' self.produceToken() self.uploadPDF(filepath) while True: res = self.progress() if res == True: break time.sleep(1) self.downloadWord(outpath+filename)
執(zhí)行主函數(shù):
if __name__=='__main__': pdf2word = PDF2Word() pdf2word.convertPDF('001.pdf','')
注意:convertPDF函數(shù)有兩個參數(shù),第一個為需要轉換的PDF,第二個參數(shù)為轉換后的目錄。
run一下,一鍵入魂,".docx"文件已經躺在了我的目錄中,舒服了~
寫在最后
到此這篇關于用python寫PDF轉換器的實現(xiàn)的文章就介紹到這了,更多相關用python寫PDF轉換器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Python的Twisted框架構建非阻塞下載程序的實例教程
Twisted的異步工作模式使其在非阻塞情況下可以擁有較高的性能,這里我們來看一下使用Python的Twisted框架構建非阻塞下載程序的實例教程,包括服務器端與客戶端的實踐.2016-05-05Python中的?Numpy?數(shù)組形狀改變及索引切片
這篇文章主要介紹了Python中的?Numpy?數(shù)組形狀改變及索引切片,Numpy提供了一個reshape()方法,它可以改變數(shù)組的形狀,返回一個新的數(shù)組,更多相關內容需要的小伙伴可以參考下面文章2022-05-05python 定時器,實現(xiàn)每天凌晨3點執(zhí)行的方法
今天小編就為大家分享一篇python 定時器,實現(xiàn)每天凌晨3點執(zhí)行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-02-02使用python求斐波那契數(shù)列中第n個數(shù)的值示例代碼
這篇文章主要給大家介紹了關于使用python求斐波那契數(shù)列中第n個數(shù)的值的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2020-07-07