百度文库爬取及PPT制作

本文介绍了一种使用Python爬虫从百度文库下载PPT的方法,通过解析网页获取图片链接并保存到本地文件夹,同时利用VB宏脚本批量创建PPT页面并导入图片。

今天帮媳妇儿做一个PPT,无奈百度文库没有积分。偶然用一次,如今互联网上哪哪都要充值还得是包月,很烦。
分两步:

  1. 爬取文库的PPT,输出图片,放到一个文件夹中
  2. PPT开发者模式,写一个宏文件,批量创建PPT页并按顺序导入图片

下面是代码:
Python版爬虫脚本,输入参数是URL。PPT版的已经经过测试验证,其他的应该原理都一样,需要的自行验证。
VB版PPT宏脚本,文件夹路径需要自己指定。

import requests
import re
import argparse
import json
import os

# 根据文件决定函数
y = 0
def DOC(url):
    doc_id = re.findall('view/(.*).html', url)[0]
    html = requests.get(url).text
    lists = re.findall('(https.*?0.json.*?)\\\\x22}', html)
    lenth = (len(lists) // 2)
    NewLists = lists[:lenth]
    for i in range(len(NewLists)):
        NewLists[i] = NewLists[i].replace('\\', '')
        txts = requests.get(NewLists[i]).text
        txtlists = re.findall('"c":"(.*?)".*?"y":(.*?),', txts)
        for i in range(0, len(txtlists)):
            global y
            print(txtlists[i][0].encode('utf-8').decode('unicode_escape', 'ignore'))
            if y != txtlists[i][1]:
                y = txtlists[i][1]
                n = '\n'
            else:
                n = ''
            filename = doc_id + '.txt'
            with open(filename, 'a', encoding='utf-8') as f:
                f.write(n + txtlists[i][0].encode('utf-8').decode('unicode_escape', 'ignore').replace('\\', ''))
        print("文档保存在" + filename)


def PPT(url):
    doc_id = re.findall('view/(.*).html', url)[0]
    url = "https://wenku.baidu.com/browse/getbcsurl?doc_id=" + doc_id + "&pn=1&rn=99999&type=ppt"
    html = requests.get(url).text
    lists = re.findall('{"zoom":"(.*?)","page"', html)
    for i in range(0, len(lists)):
        lists[i] = lists[i].replace("\\", '')
    try:
        os.mkdir(doc_id)
    except:
        pass
    for i in range(0, len(lists)):
        img = requests.get(lists[i]).content
        with open(doc_id + '\img' + str(i) + '.jpg', 'wb') as m:
            m.write(img)
    print("PPT图片保存在" + doc_id + "文件夹")


def TXT(url):
    doc_id = re.findall('view/(.*).html', url)[0]
    url = "https://wenku.baidu.com/api/doc/getdocinfo?callback=cb&doc_id=" + doc_id
    html = requests.get(url).text
    md5 = re.findall('"md5sum":"(.*?)"', html)[0]
    pn = re.findall('"totalPageNum":"(.*?)"', html)[0]
    rsign = re.findall('"rsign":"(.*?)"', html)[0]
    NewUrl = 'https://wkretype.bdimg.com/retype/text/' + doc_id + '?rn=' + pn + '&type=txt' + md5 + '&rsign=' + rsign
    txt = requests.get(NewUrl).text
    jsons = json.loads(txt)
    texts = re.findall("'c': '(.*?)',", str(jsons))
    print(texts)
    filename = doc_id + '.txt'
    with open(filename, 'a', encoding='utf-8') as f:
        for i in range(0, len(texts)):
            texts[i] = texts[i].replace('\\r', '\r')
            texts[i] = texts[i].replace('\\n', '\n')

            f.write(texts[i])
    print("文档保存在" + filename)


def FPD(url):
    doc_id = re.findall('view/(.*).html', url)[0]
    url = "https://wenku.baidu.com/browse/getbcsurl?doc_id=" + doc_id + "&pn=1&rn=99999&type=ppt"
    html = requests.get(url).text
    lists = re.findall('{"zoom":"(.*?)","page"', html)
    for i in range(0, len(lists)):
        lists[i] = lists[i].replace("\\", '')
    try:
        os.mkdir(doc_id)
    except:
        pass
    for i in range(0, len(lists)):
        img = requests.get(lists[i]).content
        with open(doc_id + '\img' + str(i) + '.jpg', 'wb') as m:
            m.write(img)
    print("FPD图片保存在" + doc_id + "文件夹")


if __name__ == "__main__":
    PPT("https://wenku.baidu.com/view/361cbd5c7f21af45b307e87101f69e314332fac1.html")


Sub photos()
Dim i As Integer
For i = 1 To 59
    ActiveWindow.View.GotoSlide Index:=ActivePresentation.Slides.Add(Index:=i, Layout:=ppLayoutBlank).SlideIndex
    ActivePresentation.Slides(i).Select
    With ActiveWindow.Selection.SlideRange
        .FollowMasterBackground = msoFalse
        .Background.Fill.UserPicture "D:\img\img" & CStr(i - 1) & ".jpg"
    End With
Next
End Sub

要使用Python编写虫代码来爬取百度文库的内容,通常需要处理一些反机制,并解析页面数据。以下是一个简单的实现思路和示例代码: ### 1. 使用`requests`和`BeautifulSoup`进行基本的网页内容提取 ```python import requests from bs4 import BeautifulSoup # 设置目标URL(以某个百度文库页面为例) url = 'https://wenku.baidu.com/view/xxxxxxxxx.html' # 替换为实际链接 # 设置请求头,模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' } # 发送HTTP请求获取页面内容 response = requests.get(url, headers=headers) # 解析HTML内容 soup = BeautifulSoup(response.text, 'html.parser') # 提取文档内容(根据页面结构查找) content = soup.find_all('div', class_='reader-container') # 根据实际页面结构调整选择器 # 输出提取的内容 for paragraph in content: print(paragraph.get_text()) ``` ### 2. 处理动态加载内容 百度文库中的部分内容可能是通过JavaScript动态加载的,这种情况下直接使用`requests`无法获取完整数据。此时可以考虑使用`Selenium`工具模拟浏览器操作。 #### 安装依赖 ```bash pip install selenium ``` #### 示例代码 ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options import time # 配置无头模式(无需打开实际浏览器窗口) chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") # 启动浏览器驱动(需下载ChromeDriver并配置路径) driver = webdriver.Chrome(options=chrome_options) # 打开目标URL url = 'https://wenku.baidu.com/view/xxxxxxxxx.html' # 替换为实际链接 driver.get(url) # 等待页面加载完成 time.sleep(5) # 获取渲染后的页面内容 rendered_html = driver.page_source # 关闭浏览器 driver.quit() # 解析渲染后的内容 from bs4 import BeautifulSoup soup = BeautifulSoup(rendered_html, 'html.parser') content = soup.find_all('div', class_='reader-container') # 根据实际页面结构调整选择器 # 输出提取的内容 for paragraph in content: print(paragraph.get_text()) ``` ### 3. 注意事项 - **遵守规则**:在实际应用中,请务必尊重网站的数据和隐私政策,合理使用虫技术。 - **反机制**:百度文库可能包含复杂的反机制,例如验证码、IP限制等,这些情况可能需要更高级的解决方案,如代理池或分布式虫。 - **异常处理**:建议添加适当的异常处理逻辑,例如超时重试、状态码检查等。 ### 4. 其他编程语言实现 除了Python,也可以使用其他编程语言实现类似功能: - **Node.js**:可以结合`axios`和`cheerio`库进行爬取。 - **Java**:可以使用`Jsoup`或`HttpClient`库进行网络请求和解析。 - **C#**:可以使用`HttpClient`和`HtmlAgilityPack`库实现。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值