怎么免费查看百度文库付费PPT(原来没有下载券)

声明:此代码仅仅是为了学习Python,分析网页用,借助平台记录学习过程。 我在读研时,常常在文库里面搜索一些资料,但苦于不能下载,所以后来就文库用的比较少。最近看了网上说可以免费下载...

声明:此代码仅仅是为了学习Python,分析网页用,借助平台记录学习过程。

我在读研时,常常在文库里面搜索一些资料,但苦于不能下载,所以后来就文库用的比较少。最近看了网上说可以免费下载百度文库文档、PPT之类,并且还有一个下载神器叫冰点文库,看了视频操作,真是强大,这可真破解了当年写论文的一大难题啊---资料搜索。今天写这个文章呢,纯粹就是为了检验Python学习效果。

一、网站分析

随便打开了一个文库(PPT)网页,如下图。

原来没有下载券,也可以下载百度文库PPT,Python确实牛

需求分析。当我们打开网站后,类似上图,是一个4页的ppt,文字不能复制(不过网上传可以拖动复制值QQ对话框,有兴趣大家可以试试),下载还需要2个下载券。想下载,怎么破?今天我的目标就是要下载这个文档。利用开发者工具分析。原来没有下载券,也可以下载百度文库PPT,Python确实牛

在上图中找出下图所标记的网址,可以看出该网址是返回的是一个json数据,里面有个list列表,正好四个元素,经分析,正好是四张PPT图片下载链接。

原来没有下载券,也可以下载百度文库PPT,Python确实牛

左侧网址打开后如下图,包含四个图片地址。

原来没有下载券,也可以下载百度文库PPT,Python确实牛

对Headers分析,get请求,带有6个参数,所以他的URL才那么长。

3,代码编写思路

一是使用requests发起请求。

二是获取doc_id,。如果下载单个的话可以不用那么麻烦,直接上网址就可以,如果想要通用的话,还是获取doc_id,构造请求参数。

三是获取json数据,从数据中把图片地址获取下来。下图为json格式化后的效果

原来没有下载券,也可以下载百度文库PPT,Python确实牛

四是下载图片。这是后期做成的exe文件。方便,通用。

原来没有下载券,也可以下载百度文库PPT,Python确实牛

五是将所有图片制作成PDF。

原来没有下载券,也可以下载百度文库PPT,Python确实牛

六是将下载的图片删除。

二、代码展示

代码写的不够完美,有点粗糙。

import requests,json,osimport fitz,re#头信息headers={ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}print)#用户输入地址,这块是可以看到PPT的地址user_url = input(('请输入百度文库PPT下载地址:')#使用字符串分割对输入的网址取出doc_id doc_id = user_url .split('/')[-1].split('.')[0]#构造参数,将doc_id 传入params={ 'doc_id':doc_id, 'pn': 1, 'rn': 99999, 'type': 'ppt',}#获取json文件def get_json(url): data=requests.get(url,headers = headers).text img_json=json.loads(data) return img_jsonif __name__ == '__main__': #请求访问,url拼接网址用,未带请求参数 url = 'https://wenku.baidu.com/browse/getbcsurl?' response = requests.get(url, params=params, headers=headers) #传入的是json数据的网址 img_json = get_json(response.url) # #创建一个空白的PDF文档 doc = fitz.open() #获取ppt文件名 data = requests.get(user_url , headers=headers) data.encoding = 'gb2312' pat = '<title>(.*?)</title>' name = re.findall(pat, data.text, re.S)[0] name = name.split(' ')[0] #循环,下载图片 for i in range(len(img_json)): print('共计PPT%d张'%len(img_json)) #获取图片URL img_url = img_json[i]['zoom'] #这个用于计数 num = i + 1 print('正在下载第%d张PPT,请稍等.......' % num) res = requests.get(img_url, headers=headers) #保存图片 with open('%d'%i + '.jpg', 'wb') as f: f.write(res.content) print('载第%d张PPT下载完毕!' % num) #将图片转换为PDF img_doc =fitz.open('%d'%i + '.jpg') pdf = img_doc.convertToPDF() imgPdf = fitz.open('pdf',pdf) doc.insertPDF(imgPdf) doc.save('%s.pdf'%name ) doc.close() print(name+'已成功创建!') #循环,删除图片,需要图片的这步可以跳过 for i in range(len(img_json)): os.remove('%d'%i + '.jpg') print('图片已删除')

  • 发表于 2022-10-30 15:17:41
  • 阅读 ( 1388 )
  • 分类:科技

0 条评论

请先 登录 后评论
九十几
九十几

1037 篇文章

你可能感兴趣的文章

相关问题