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的简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云pos系统的服务器性能,实施云POS系
- 下一篇: QQ空间欢迎动画代码大全