前言
某個夜深人靜的夜晚,夜微涼風微揚,月光照進我的書房~
當我打開檔案夾以回顧往事之余,驚現許多看似雜亂的無聊代碼,我拍腿正坐,一個想法油然而生:“生活已然很無聊,不如再無聊些叭”,
于是,我決定開一個專題,便稱之為kimol君的無聊小發明,妙…啊~~~
想必小伙伴都經歷過,當你想要把PDF轉為WORD時,自己打字赫赫甩在你眼前:
不充錢就想白嫖?? 想得美~
然而,kimol君是不會退縮的,畢竟迎難而上是傳統美德,于是,今天的主題出來了:用python寫一個PDF轉WORD的小工具(基于某網站介面),
一、思路分析
網上一搜,你可以發現很多PDF轉換的工具,其中不乏在線轉換的網站,比如這樣的:
那么,通過網站提供的測驗介面,我們便可以通過爬蟲模擬的方式實作轉換,
沒有錯了~思路就是如此的簡單明了,今天的主角便是:
https://app.xunjiepdf.com
- 1
通過抓包分析,知道這是一個POST請求,接下來用requests庫模擬即可,需要注意的是,這個介面僅用于測驗,所以可供轉換的頁面等都有所限制,如需更完整的功能還請支持原版,
二、我的代碼
正所謂一萬個coders,就有一萬種codes,以下為我的代碼,僅供參考,
匯入相關庫:
import time
import requests
- 1
- 2
定義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'