Python爬取百度文库中的PPT(2021.3.16) 您所在的位置:网站首页 如何将百度文库的ppt存到本地 Python爬取百度文库中的PPT(2021.3.16)

Python爬取百度文库中的PPT(2021.3.16)

#Python爬取百度文库中的PPT(2021.3.16)| 来源: 网络整理| 查看: 265

Python爬虫获取百度文库PPT 2021.3.16 1、需求分析2、网站分析2.1 寻找PPT各页面对应图片的url2.2 复制PPT所有页面图片的url到result.txt中。 3、Python代码批量下载PPT所有页面图片4、运行结果展示4.1 利用所有PPT图片自动生成word文档4.2 利用PPT图片手动生成word

1、需求分析

        大家都知道,百度文库中的资源主要以Word文档和PPT为主,而Word文档主要由文本和公式组成,而PPT中的文本并不多,重点是图片和绚丽的色彩风格。         有的网友在百度文库中找到了自己所需的文档,可能出于学习或研究的目的想要下载到本地,面对一些VIP付费资源可能会束手无策。比如尝试过下载百度文库里的PPT课件之类的资源,但由于PPT页数太长,百度文库只限制前多少页能够被预览,而如果想要查看后面的页数则需要登录百度账号,然后可能会提示VIP或者付费才能下载。         比如学生党需要下载百度文库中107页的物理学与现代信息技术——物理学薛其坤院士课件,但看到页面会提示让登录百度账号,可能有的网友用过冰点文库下载器,但这个下载器可能下载内容不全(好像最多支持仅下载前50页)。 在这里插入图片描述         如果不登录百度账号,在浏览器里下拉页面到底部会看到购买全文需要35元RMB,对于学生党来说好心疼啊,赶上自己一个月的手机费了。(其实可以几个同学一起购买后共同使用也是不错的选择哦!) 在这里插入图片描述         无奈之下,迫不得已还是需要登录百度账号,毕竟百度系列的服务(百度搜索、百度地图、百度图片、百度文库、百度网盘等)还是希望用户登录百度账号的,以便为用户提供优质的个性化服务。 在这里插入图片描述         登录百度账号后会发现只要不断点击页面底部的继续阅读便可阅读PPT的全部内容(当然前提是电脑联网且已登录百度账号),好不容易翻到了PPT的最后一页(107页),终于可以查看全部页面了,但有的同学觉得浏览器里在线看还是不如本地离线看来得实在,还是想要下载,但苦于页面下方只有购买文档和VIP8购买按钮,自己不想手动一张一张截图或者拖拽下载啊!(主要是懒)这时心里默想一下:要是页面有个免费下载按钮该多好啊! 在这里插入图片描述

2、网站分析

        在百度文库中找到物理学与现代信息技术——物理学薛其坤院士课件,首先需要知道在百度文库中PPT课件中将鼠标放在PPT第一页上进行向右上角拖拽后,会看到浏览器打开一个新的地址,即PPT第一页对应图片的链接。 在这里插入图片描述

2.1 寻找PPT各页面对应图片的url

        首页—第1页PPT的图片界面 在这里插入图片描述         中间页----第50页PPT的图片界面 在这里插入图片描述         尾页—第107页PPT的图片界面 在这里插入图片描述         首页、中间页、尾页的PPT对应图片的url地址如下所示,其实本质上url中pn相当于pagenumber页号,pn=1表示第1页PPT,pn=50表示第50页PPT,pn=107表示第107页PPT之后的png和jpg代表两种图片格式,通过对比几个连续的PPT页面的url发现png或jpg的号码是连续的,但好像无法根据页面号直接得出png=?或者jpg=?,何必浪费时间去找不一定存在的规律呢?因此干脆直接获取所有页面的url不就得了嘛! 在这里插入图片描述

https://wkretype.bdimg.com/retype/zoom/04f08a71f90f76c661371aa2?pn=1&o=jpg_6&md5sum=517b429bd358c9b21717c02a246bd97c&sign=701d2668bb&png=0-242&jpg=0-69310 https://wkretype.bdimg.com/retype/zoom/04f08a71f90f76c661371aa2?pn=50&o=jpg_6&md5sum=517b429bd358c9b21717c02a246bd97c&sign=701d2668bb&png=3475846-3566915&jpg=6744219-6880520 https://wkretype.bdimg.com/retype/zoom/04f08a71f90f76c661371aa2?pn=107&o=jpg_6&md5sum=517b429bd358c9b21717c02a246bd97c&sign=701d2668bb&png=10653739-&jpg=15144062-

        那么问题来了,107个PPT图片对应的url该去何处寻找呢?不要慌,浏览器里遇到问题不会就按F12或者打开设置里的开发工具,工具里默认选择的是Sources,这里先点击Elements后用鼠标点击左侧的箭头按钮,然后移动到第3页的PPT上进行选中, 在这里插入图片描述         选中后右侧的Elements下方的内容会定位到div里的img src=处,这时只需双击该url即可选中右键复制得到第3张PPT对应的图片url

https://wkretype.bdimg.com/retype/zoom/04f08a71f90f76c661371aa2?pn=3&o=jpg_6&md5sum=517b429bd358c9b21717c02a246bd97c&sign=701d2668bb&png=2946-5648&jpg=116903-295339

在这里插入图片描述 在这里插入图片描述         这下心里就爽朗许多了,从以下两图中可以看到每个页面都有其对应的div,div里的img src=放的是该页面对应图片的url地址,需要浏览完所有的页面 在这里插入图片描述 在这里插入图片描述

2.2 复制PPT所有页面图片的url到result.txt中。

        然后切换到Sources下后,将下图中的div部分page-1到page-107复制到result.txt中。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述         div内容如下所示(因为已经浏览过所有页面,其实div内容就包含在上图647cb0ce6d85ec3a87c24028915f804d2a168741.html文件中,这个文件可用记事本打开也能找到如下div内容)

3、Python代码批量下载PPT所有页面图片

        通过上述分析,已经获得了百度文库所要下载PPT所有页面(1-107)对应图片的url下载链接,都被保存到了result.txt中,现在可以写Python代码批量下载PPT各页面图片到指定文件夹并生成word文档喽!

import urllib.request import docx #创建内存中的word文档对象 from docx.shared import Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENT def download_img(img_url,imgname): request = urllib.request.Request(img_url) try: response = urllib.request.urlopen(request) img_name = imgname+'.jpg' filename = "D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\PPTimgpath1\\" + img_name if (response.getcode() == 200): with open(filename, "wb") as f: f.write(response.read()) # 将内容写入图片 return filename except: return "failed" docfile = docx.Document()#要写入的word文档 headers ={'Connection': 'close'} txtfilename = "E:\\result.txt" #读取html中带有div片段和img src的txt txtfopen = open(txtfilename, 'r',encoding='UTF-8') lines = txtfopen.readlines() i=1 for line in lines: if((i+2)%5==0):# 3、5、8行依次代表第1、2、3张PPT的内容 linestring = line.strip('\n') imgurl = linestring[linestring.find('src="')+5:linestring.find('" alt=""')].replace('"','') #第i张PPT的url下载链接 img_name = str((i+2)/5) filename = "D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\PPTimgpath1\\" + img_name+'.jpg' download_img(imgurl, img_name) paragraph = docfile.add_paragraph() # 图片居中设置 paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER run = paragraph.add_run("") run.add_picture(filename) print((i+2)/5, imgurl)#去除换行符 i=i+1 txtfopen.close() docfile.save("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\DownloadPPT.docx") #保存 4、运行结果展示 4.1 利用所有PPT图片自动生成word文档

在这里插入图片描述         代码直接运行后,PPT中1-107页所有图片都被保存在了PPTimgpath1文件夹下,同时生成了DownloadPPT.docx文档。 在这里插入图片描述 在这里插入图片描述         打开DownloadPPT.docx文档后发现PPT1-107页图片插入word后大小并不自适应。 在这里插入图片描述         于是打开下载的PPT图片文件夹,通过右键查看图片属性,才发现原来图片像素为1080像素 x 810像素,这个着实有点大啊! 在这里插入图片描述         当然如果想要改动图片大小后自动保存到Word文档,可参考如下代码:

import docx #创建内存中的word文档对象 from docx.shared import Pt from docx.enum.text import WD_PARAGRAPH_ALIGNMENT import os.path from PIL import Image filename = os.listdir("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\PPTimgpath1\\") size_m = 360 size_n = 270 docfile = docx.Document()#要写入的word文档 headers ={'Connection': 'close'} i=1 for img in filename: image = Image.open("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\PPTimgpath1\\" + img) image_size = image.resize((size_m, size_n), Image.ANTIALIAS) image_size.save("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\NewPPTimgpath1\\" + img) paragraph = docfile.add_paragraph() # 图片居中设置 paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER run = paragraph.add_run("") run.add_picture("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\NewPPTimgpath1\\" + img) print(i,"D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\NewPPTimgpath1\\" + img) i = i + 1 docfile.save("D:\\Program Files (x86)\\PyCharm Community Edition 2020.1.1\\PaQukemu4tiku\\folder\\ChangeSizePPT.doc") #保存

        运行后再NewPPTimagpath1文件夹下生成了缩小为360像素 x 270像素的PPT图片,同时生成了ChangeSizePPT.docx文档,分别如下图所示。 在这里插入图片描述 在这里插入图片描述         看得出来,图片未缩小前自动生成的Word文档DownloadPPT.docx比缩小后自动生成的Word文档ChangeSizePPT.docx的存储空间所占大小小了许多,因为图片压缩大小意味着失真,局部模糊。 在这里插入图片描述 在这里插入图片描述

4.2 利用PPT图片手动生成word

        如果确实不知道该如何调整大小,而又想保证原始下载PPT所有页面图片的清晰度可直接新建Word文档(命名为物理学与现代信息技术——物理学薛其坤院士.docx)后,点击上方菜单栏的插入,选择图片,在PPT页面图片文件夹下选中所有图片即可完成。 在这里插入图片描述 在这里插入图片描述         PPT所有页面图片插入完成后word文档如上图所示,这时只需调整段落行距为单倍行距就能正常显示了。 在这里插入图片描述         这时可以看到整个word文档里面PPT所有图片都能自适应大小,并且图片失真程度最小,整个任务完成。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

注:本博客内容尊重知识创作,旨在学习交流使用,切勿用于非法商业用途!!!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有