今天帮媳妇儿做一个PPT,无奈百度文库没有积分。偶然用一次,如今互联网上哪哪都要充值还得是包月,很烦。
分两步:
- 爬取文库的PPT,输出图片,放到一个文件夹中
- PPT开发者模式,写一个宏文件,批量创建PPT页并按顺序导入图片
下面是代码:
Python版爬虫脚本,输入参数是URL。PPT版的已经经过测试验证,其他的应该原理都一样,需要的自行验证。
VB版PPT宏脚本,文件夹路径需要自己指定。
import requests
import re
import argparse
import json
import os
# 根据文件决定函数
y = 0
def DOC(url):
doc_id = re.findall('view/(.*).html', url)[0]
html = requests.get(url).text
lists = re.findall('(https.*?0.json.*?)\\\\x22}', html)
lenth = (len(lists) // 2)
NewLists = lists[:lenth]
for i in range(len(NewLists)):
NewLists[i] = NewLists[i].replace('\\', '')
txts = requests.get(NewLists[i]).text
txtlists = re.findall('"c":"(.*?)".*?"y":(.*?),', txts)
for i in range(0, len(txtlists)):
global y
print(txtlists[i][0].encode('utf-8').decode('unicode_escape', 'ignore'))
if y != txtlists[i][1]:
y = txtlists[i][1]
n = '\n'
else:
n = ''
filename = doc_id + '.txt'
with open(filename, 'a', encoding='utf-8') as f:
f.write(n + txtlists[i][0].encode('utf-8').decode('unicode_escape', 'ignore').replace('\\', ''))
print("文档保存在" + filename)
def PPT(url):
doc_id = re.findall('view/(.*).html', url)[0]
url = "https://wenku.baidu.com/browse/getbcsurl?doc_id=" + doc_id + "&pn=1&rn=99999&type=ppt"
html = requests.get(url).text
lists = re.findall('{"zoom":"(.*?)","page"', html)
for i in range(0, len(lists)):
lists[i] = lists[i].replace("\\", '')
try:
os.mkdir(doc_id)
except:
pass
for i in range(0, len(lists)):
img = requests.get(lists[i]).content
with open(doc_id + '\img' + str(i) + '.jpg', 'wb') as m:
m.write(img)
print("PPT图片保存在" + doc_id + "文件夹")
def TXT(url):
doc_id = re.findall('view/(.*).html', url)[0]
url = "https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=" + doc_id
html = requests.get(url).text
md5 = re.findall('"md5sum":"(.*?)"', html)[0]
pn = re.findall('"totalPageNum":"(.*?)"', html)[0]
rsign = re.findall('"rsign":"(.*?)"', html)[0]
NewUrl = 'https://wkretype.bdimg.com/retype/text/' + doc_id + '?rn=' + pn + '&type=txt' + md5 + '&rsign=' + rsign
txt = requests.get(NewUrl).text
jsons = json.loads(txt)
texts = re.findall("'c': '(.*?)',", str(jsons))
print(texts)
filename = doc_id + '.txt'
with open(filename, 'a', encoding='utf-8') as f:
for i in range(0, len(texts)):
texts[i] = texts[i].replace('\\r', '\r')
texts[i] = texts[i].replace('\\n', '\n')
f.write(texts[i])
print("文档保存在" + filename)
def FPD(url):
doc_id = re.findall('view/(.*).html', url)[0]
url = "https://wenku.baidu.com/browse/getbcsurl?doc_id=" + doc_id + "&pn=1&rn=99999&type=ppt"
html = requests.get(url).text
lists = re.findall('{"zoom":"(.*?)","page"', html)
for i in range(0, len(lists)):
lists[i] = lists[i].replace("\\", '')
try:
os.mkdir(doc_id)
except:
pass
for i in range(0, len(lists)):
img = requests.get(lists[i]).content
with open(doc_id + '\img' + str(i) + '.jpg', 'wb') as m:
m.write(img)
print("FPD图片保存在" + doc_id + "文件夹")
if __name__ == "__main__":
PPT("https://wenku.baidu.com/view/361cbd5c7f21af45b307e87101f69e314332fac1.html")
Sub photos()
Dim i As Integer
For i = 1 To 59
ActiveWindow.View.GotoSlide Index:=ActivePresentation.Slides.Add(Index:=i, Layout:=ppLayoutBlank).SlideIndex
ActivePresentation.Slides(i).Select
With ActiveWindow.Selection.SlideRange
.FollowMasterBackground = msoFalse
.Background.Fill.UserPicture "D:\img\img" & CStr(i - 1) & ".jpg"
End With
Next
End Sub