背景:最近在看各种金融相关的文档,觉得还是课件ppt上讲的逻辑清晰,好理解一些,但是各个网站下载很贵,总是在线看又怕找不着了,看着这些ppt就流口水,这就想办法简单的爬下来。

实验目标下载百度文库ppt

问题:

1、https连接请求

2、页面存在未完全展开情况,即【继续阅读】需要点击

3、存在浏览器js渲染,ppt的图片连接渲染后能得到真实的

成果

下载目标:

转换结果

思想:

1、使用selenium调用谷歌浏览器,实现渲染

2、模拟点击和敲击回车事件,实现各个页面渲染

3、保存渲染后的ppt图片

4、借助pptx实现ppt操作,即ppt插入图片等操作

一、准备

下载谷歌驱动:

准备必要的第三方模块:pptx,selenium

二、初始化谷歌浏览器驱动

def init_driver():

"""

初始化驱动

可以增加请求头,模拟手机端登陆,获取到文库文字信息

:return:

"""

options = webdriver.ChromeOptions()

driver = webdriver.Chrome(BROWSER_PATH, chrome_options=options)

# options.add_argument(

# 'user-agent="Mozilla/5.0 (Linux; Android 4.0.4; \ Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) \ Chrome/18.0.1025.133 Mobile Safari/535.19"')

# driver = webdriver.Chrome(chrome_options=options)

return driver

三、模拟点击和回车事件

点开继续阅读事件通过下面代码实现

init_page = driver.find_element_by_xpath("//span[@class='read-all']")

driver.execute_script('arguments[0].scrollIntoView();', init_page)

init_page.click()

遍历所有页面,并模拟回测通过下面代码实现

input_page = driver.find_element_by_xpath("//input[@class='cur-page']")

input_page.clear()

input_page.send_keys(index + 1)

input_page.send_keys(Keys.RETURN)

四、ppt制作

def create_ppt(name):

"""

生成ppt

:param name:

:return:

"""

prs = Presentation()

files = os.listdir("BaiduNetdiskDownload\\")

if files:

files.sort(key=lambda x: int(x[:-4]))

for k in files:

ppt = prs.slide_layouts[6]

# 添加到ppt中

ppts = prs.slides.add_slide(ppt)

# 空白ppt添加下载的图片

left, top, width, height = Inches(0), Inches(0), Inches(10), Inches(7.5)

ppts.shapes.add_picture("BaiduNetdiskDownload\\" + k, left, top, width, height)

prs.save(name)

文件保存要重新排序,否则按字母排序会乱。

五、所有代码

# @Time : 2020/9/1

# @Author : 大太阳小白

# @Software: PyCharm

# @blog:https://blog.csdn.net/weixin_41579863

from pptx import Presentation

from pptx.util import Inches

import requests

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import time

import os

# 谷歌浏览器驱动,我放到了工程目录下

BROWSER_PATH = 'chromedriver.exe'

def init_driver():

"""

初始化驱动

可以增加请求头,模拟手机端登陆,获取到文库文字信息

:return:

"""

options = webdriver.ChromeOptions()

driver = webdriver.Chrome(BROWSER_PATH, chrome_options=options)

# options.add_argument(

# 'user-agent="Mozilla/5.0 (Linux; Android 4.0.4; \ Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) \ Chrome/18.0.1025.133 Mobile Safari/535.19"')

# driver = webdriver.Chrome(chrome_options=options)

return driver

def parser(driver, url):

"""

浏览器解析完成渲染,并下载图片

:param driver:

:param url:

:return:

"""

driver.get(url)

# 点击继续阅读,展开所有页面

init_page = driver.find_element_by_xpath("//span[@class='read-all']")

driver.execute_script('arguments[0].scrollIntoView();', init_page)

init_page.click()

# 匹配所有ppt下的图片

divs = driver.find_elements_by_xpath('//div[contains(@id,"pageNo")]//img')

index = 0

# 分页渲染,获得真实图片路径

while index < len(divs):

name = '{}.png'.format(index)

# input输入值,并模拟回车

input_page = driver.find_element_by_xpath("//input[@class='cur-page']")

input_page.clear()

input_page.send_keys(index + 1)

input_page.send_keys(Keys.RETURN)

time.sleep(1)

divs = driver.find_elements_by_xpath('//div[contains(@id,"pageNo")]//img')

with open("BaiduNetdiskDownload\\" + name, "wb") as file:

try:

src = divs[index].get_attribute('src')

src = str(src).replace('https', 'http')

file.write(requests.get(src).content)

file.flush()

index += 1

except Exception as e:

# 可能会出错,歇一会继续

print('出现异常了', index, e)

time.sleep(2)

def create_ppt(name):

"""

生成ppt

:param name:

:return:

"""

prs = Presentation()

files = os.listdir("BaiduNetdiskDownload\\")

if files:

files.sort(key=lambda x: int(x[:-4]))

for k in files:

ppt = prs.slide_layouts[6]

# 添加到ppt中

ppts = prs.slides.add_slide(ppt)

# 空白ppt添加下载的图片

left, top, width, height = Inches(0), Inches(0), Inches(10), Inches(7.5)

ppts.shapes.add_picture("BaiduNetdiskDownload\\" + k, left, top, width, height)

prs.save(name)

if __name__ == '__main__':

DEST_URL = 'https://wenku.baidu.com/view/34cf62f74b649b6648d7c1c708a1284ac8500523.html'

google_driver = init_driver()

parser(google_driver, DEST_URL)

create_ppt("期权.ppt")

原文链接:https://blog.csdn.net/weixin_41579863/article/details/108355253

python爬取文库,python爬取文库ppt的简单实现相关推荐

  1. 利用Python进行百度文库内容爬取(二)——自动点击预览全文并爬取

    本文是衔接上一篇:<利用Python进行百度文库内容爬取(一)>. 上回说到我们在对百度文库进行爬虫时,需要模拟手机端来进行登录,这样固然可以对文章进行爬取,但是很多时候并不是非常智能的翻 ...

  2. python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析

    上一次分享了使用matplotlib对爬取的豆瓣书籍排行榜进行分析,但是发现python本身自带的这个绘图分析库还是有一些局限,绘图不够美观等,在网上搜索了一波,发现现在有很多的支持python的绘图 ...

  3. python分析b站_Python爬取并分析B站最热排行榜,我发现了这些秘密

    现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...

  4. 搜狗·疫情数据爬取(Python)

    上周已经分享过搜狗·疫情数据爬取(R语言),这次分享一下搜狗·疫情数据爬取(Python) 不说废话,直接上代码.有什么问题,可以在留言区讨论. from urllib import request ...

  5. python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片

    Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...

  6. python编程100例头条-python爬虫演示:以爬取今日头条为例

    编者按 众所周知,Python是一门编程语言,操作简洁而清晰.功能专业而强大.入门容易又严谨.2018年,教育部正式将人工智能.物联网.大数据处理划入高中课程,这就意味着,现在的中学生开始就要学习编程 ...

  7. python 爬虫实例 电影-Python爬虫教程-17-ajax爬取实例(豆瓣电影)

    Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...

  8. python xpath循环_初学Python,就用它爬取一点情话说给她听!

    老铁们,一年一度的520就要来了,大家有没有正在抓耳挠腮的给女朋友准备礼物呢? 作为一个业余非专业程序猿(ps:自称程序猿,哈哈),最近初学python,用它来抓取情话网站的100页情话,作为给女朋友 ...

  9. python爬虫对炒股有没有用_使用python爬虫实现网络股票信息爬取的demo

    实例如下所示: import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url ...

  10. python证券_基于Python爬取搜狐证券股票过程解析

    数据的爬取 我们以上证50的股票为例,首先需要找到一个网站包含这五十只股票的股票代码,例如这里我们使用搜狐证券提供的列表. 可以看到,在这个网站中有上证50的所有股票代码,我们希望爬取的就是这个包含股 ...

最新文章

  1. 2022-2028年中国领带行业投资分析及前景预测报告
  2. cv2.threshholding()简单阈值、自适应阈值,Octus阈值
  3. Dlib库中实现正脸人脸检测的测试代码
  4. 大型AI已有自主意识了?LeCun开喷Open AI首席科学家
  5. Java基础知识之泛型全接触
  6. 服务器拒绝接收office文件,Ghost Win7系统下Outlook设置拒绝接收垃圾文件的方法
  7. python由列表中提取出来的浮点型字符串不能直接转换成整形
  8. 9个 Python 实用案例分享
  9. crontab简单示例
  10. zookeeper注意几点
  11. 论文浅尝 | KnowEdu: 一个自动构建教育知识图谱的系统
  12. ASP.NET MVC中的路由IRouteConstraint方法应用实例
  13. asp.net应用程序级别跟踪
  14. python导入selenium快捷键_python,_Selenium工具自动打开的浏览器和用快捷方式打开的样式不一样?,python - phpStudy...
  15. 鸟哥的Linux私房菜PDF在线阅读
  16. 基于FPGA的DS18B20数字温度传感器测温实例
  17. Windows server 2012 R2网卡驱动安装经历
  18. libmaxminddb
  19. 等额本息还款计算公式
  20. ofo 成了一个披着「退押金」的电商导购平台?

热门文章

  1. 台式计算机把光驱改成硬盘,笔记本电脑光驱怎么改换硬盘?笔记本光驱改装固态硬盘图文教程...
  2. 高德地图 天气java_高德地图API获取天气
  3. linux中help命令鸟叔,linux的帮助命令help、man、--help
  4. 用MATLAB敲qda,LOMO_XQDA
  5. 柯里化(Curry)
  6. JavaScript系列之条件运算符
  7. 卡耐基梅隆大学计算机科学课本,美国卡耐基梅隆大学计算机科学硕士.pdf
  8. \t\t长痘痘(鼻尖,脸上等部位)的原因,应该怎么办?
  9. 麻省理工学院公开课,信号与系统: (一) 引言
  10. java中解耦合_简单分析程序中耦合和解耦合