打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

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

一、网站分析

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

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

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

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

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

3,代码编写思路

一是使用requests发起请求。

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

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

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

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

六是将下载的图片删除。

二、代码展示

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

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('图片已删除')
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python爬取分析全国12个城市4万条房价信息,告诉你该怎样买房?
python|python实现汉译英
百度文档,用Python一键免费下载
不用下载券也能下载百度文库资料,Python帮你轻松搞定
【python 爬虫】python如何以request payload形式发送post请求
25. Python爬虫教学:爬取B站视频源代码(复制可用)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服