python爬取文库,python爬取文库ppt的简单实现
背景:最近在看各种金融相关的文档,觉得还是课件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的简单实现相关推荐
- 利用Python进行百度文库内容爬取(二)——自动点击预览全文并爬取
本文是衔接上一篇:<利用Python进行百度文库内容爬取(一)>. 上回说到我们在对百度文库进行爬虫时,需要模拟手机端来进行登录,这样固然可以对文章进行爬取,但是很多时候并不是非常智能的翻 ...
- python获取天气分析_Python爬取南京市往年天气预报,使用pyecharts进行分析
上一次分享了使用matplotlib对爬取的豆瓣书籍排行榜进行分析,但是发现python本身自带的这个绘图分析库还是有一些局限,绘图不够美观等,在网上搜索了一波,发现现在有很多的支持python的绘图 ...
- python分析b站_Python爬取并分析B站最热排行榜,我发现了这些秘密
现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...
- 搜狗·疫情数据爬取(Python)
上周已经分享过搜狗·疫情数据爬取(R语言),这次分享一下搜狗·疫情数据爬取(Python) 不说废话,直接上代码.有什么问题,可以在留言区讨论. from urllib import request ...
- python爬取图片教程-推荐|Python 爬虫系列教程一爬取批量百度图片
Python 爬虫系列教程一爬取批量百度图片https://blog.csdn.net/qq_40774175/article/details/81273198# -*- coding: utf-8 ...
- python编程100例头条-python爬虫演示:以爬取今日头条为例
编者按 众所周知,Python是一门编程语言,操作简洁而清晰.功能专业而强大.入门容易又严谨.2018年,教育部正式将人工智能.物联网.大数据处理划入高中课程,这就意味着,现在的中学生开始就要学习编程 ...
- python 爬虫实例 电影-Python爬虫教程-17-ajax爬取实例(豆瓣电影)
Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...
- python xpath循环_初学Python,就用它爬取一点情话说给她听!
老铁们,一年一度的520就要来了,大家有没有正在抓耳挠腮的给女朋友准备礼物呢? 作为一个业余非专业程序猿(ps:自称程序猿,哈哈),最近初学python,用它来抓取情话网站的100页情话,作为给女朋友 ...
- python爬虫对炒股有没有用_使用python爬虫实现网络股票信息爬取的demo
实例如下所示: import requests from bs4 import BeautifulSoup import traceback import re def getHTMLText(url ...
- python证券_基于Python爬取搜狐证券股票过程解析
数据的爬取 我们以上证50的股票为例,首先需要找到一个网站包含这五十只股票的股票代码,例如这里我们使用搜狐证券提供的列表. 可以看到,在这个网站中有上证50的所有股票代码,我们希望爬取的就是这个包含股 ...
最新文章
- 2022-2028年中国领带行业投资分析及前景预测报告
- cv2.threshholding()简单阈值、自适应阈值,Octus阈值
- Dlib库中实现正脸人脸检测的测试代码
- 大型AI已有自主意识了?LeCun开喷Open AI首席科学家
- Java基础知识之泛型全接触
- 服务器拒绝接收office文件,Ghost Win7系统下Outlook设置拒绝接收垃圾文件的方法
- python由列表中提取出来的浮点型字符串不能直接转换成整形
- 9个 Python 实用案例分享
- crontab简单示例
- zookeeper注意几点
- 论文浅尝 | KnowEdu: 一个自动构建教育知识图谱的系统
- ASP.NET MVC中的路由IRouteConstraint方法应用实例
- asp.net应用程序级别跟踪
- python导入selenium快捷键_python,_Selenium工具自动打开的浏览器和用快捷方式打开的样式不一样?,python - phpStudy...
- 鸟哥的Linux私房菜PDF在线阅读
- 基于FPGA的DS18B20数字温度传感器测温实例
- Windows server 2012 R2网卡驱动安装经历
- libmaxminddb
- 等额本息还款计算公式
- ofo 成了一个披着「退押金」的电商导购平台?
热门文章
- 台式计算机把光驱改成硬盘,笔记本电脑光驱怎么改换硬盘?笔记本光驱改装固态硬盘图文教程...
- 高德地图 天气java_高德地图API获取天气
- linux中help命令鸟叔,linux的帮助命令help、man、--help
- 用MATLAB敲qda,LOMO_XQDA
- 柯里化(Curry)
- JavaScript系列之条件运算符
- 卡耐基梅隆大学计算机科学课本,美国卡耐基梅隆大学计算机科学硕士.pdf
- \t\t长痘痘(鼻尖,脸上等部位)的原因,应该怎么办?
- 麻省理工学院公开课,信号与系统: (一) 引言
- java中解耦合_简单分析程序中耦合和解耦合