【Python爬虫实战入门】:教你一个程序实现PPT模版自由

news2024/11/24 1:42:28

文章目录

      • 💥一、PPT模版爬取
        • 🔥1.1 第一个爬虫
          • 🚲1. 获取下载页面链接
        • ❤️1.2 第二个爬虫
        • 🚲1.3 第三个爬虫
          • 🎈2. 文件保存
        • ❤️1.4 翻页处理
      • 🔥二、完整代码

🔥🔥🔥 Python爬虫专栏

💥一、PPT模版爬取

🛤️目标网址

https://www.ypppt.com/moban/

关于第三方模块requests

Python 的第三方模块 requests 是一个非常流行的 HTTP 客户端库,用于发送各种 HTTP 请求。它由 Kenneth > Reitz 开发,并被广泛用于 Python 社区。以下是 requests 模块的一些主要特点:


  1. 简单易用:requests 的 API 设计简洁,使得发送 HTTP 请求变得非常简单。
  2. 跨平台:它支持 Python 2.7 和 3.4+ 版本,可以在多种操作系统上运行。
  3. 国际化:支持国际域名和 URL。
  4. HTTP 连接保持:可以持久化连接,减少连接建立的开销。
  5. 支持多部分文件上传:方便地上传文件。
  6. 支持 Sessions:允许跨请求保持某些参数,如 cookies。
  7. 可连接的流式请求:可以方便地下载大文件。
  8. 支持同步和异步操作:虽然 requests 本身是同步的,但可以与异步框架如 grequests 或 aiohttp 结合使用。
  9. SSL 证书验证:默认情况下会验证 SSL 证书。
  10. 社区支持:由于其流行度,requests 有一个活跃的社区,可以快速获得帮助和支持。

安装pip install requests

✈1.1 爬虫框架
💥思路

  1. 模板的主页链接:https://www.ypppt.com/moban/
  2. 获取某一个PPT的下载页面链接:https://www.ypppt.com/p/d.php?aid=8257
  3. 获取下载链接
# 导入请求模块
import requests

# 伪装
headers = {
    'User-Agent': '浏览器信息',
    'Cookie': '浏览器信息'
}

url = '目标网址'

# 请求网址获得响应
res = requests.get(url, headers=headers)
🔥1.1 第一个爬虫

根据我们的思路,首先我们要写第一个爬虫来从模版首页获取PPT编号

🛤️目标网址https://www.ypppt.com/moban/
🛤️浏览器信息
在这里插入图片描述

# 导入请求模块
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
    'Cookie': 'Hm_lvt_45db753385e6d769706e10062e3d6453=1715320446; __gads=ID=f965cafb7bccd599:T=1715320445:RT=1715320445:S=ALNI_MYHKs8_kMiTTQssHwk_I4unaHm1zQ; __gpi=UID=00000e15cb8f6b9a:T=1715320445:RT=1715320445:S=ALNI_MZWVWyERCMXvsHDoW2WB20RuXSXEg; __eoi=ID=d8be83a85bd77edf:T=1715320445:RT=1715320445:S=AA-AfjZv_F_ROl0rslGv9LnpXhIp; Hm_lpvt_45db753385e6d769706e10062e3d6453=1715320500'
}

url = 'https://www.ypppt.com/moban/'

# 请求网址获得响应
res = requests.get(url, headers=headers, verify=False)
print(res.text)

注意:在使用 Python 的 requests 库发送 HTTP 请求时,verify 参数是一个布尔值,它控制着 SSL 证书验证的行为。

  • 当 verify=True(默认设置)时,requests 会验证 SSL 证书的有效性。这意味着 requests 将检查你正在与之通信的服务器是否拥有一个有效的、由受信任的证书颁发机构签发的 SSL 证书。如果证书无效或过期,或者与请求的主机名不匹配,requests 将抛出一个 SSLError 异常。

  • 当 verify=False 时,requests 将不会验证 SSL 证书的有效性。这通常用于测试环境或某些特定情况下,服务器使用自签名证书或不安全的连接,而你又不希望因为证书验证而中断请求。

使用 verify=False 会降低安全性,因为它允许连接到可能不安全的服务器,这可能使你的应用程序容易受到中间人攻击。因此,除非有充分的理由,否则不建议在生产环境中禁用 SSL 证书验证。

此外,verify 参数也可以是一个字符串,指定一个文件路径,该文件包含多个受信任的SSL证书的路径。这允许你使用自定义的证书颁发机构的证书。
示例

import requests

# 默认情况下,verify 为 True,将验证 SSL 证书
response = requests.get('https://example.com', verify=True)

# 禁用 SSL 证书验证
response = requests.get('https://example.com', verify=False)

# 使用自定义证书
response = requests.get('https://example.com', verify='path/to/custom/cert.pem')

在处理金融数据、用户个人信息或其他敏感数据时,确保 SSL 证书验证是启用的非常重要,以维护数据的安全性和完整性。

注意:在写爬虫的时候如果遇到SSL的错误,也就是证书检查,可以使用verify=False来忽略证书检查!
在这里插入图片描述
由于我们忽略了证书检查,所以每次运行都会有一个警告,忽略警告的代码如下:

# 导入请求模块
import requests
# 忽略警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}

url = 'https://www.ypppt.com/moban/'

# 请求网址获得响应
res = requests.get(url, headers=headers, verify=False)
print(res.text)

在这里插入图片描述

☔解决乱码问题
从上面的截图可以看出,打印出来的内容有许多我们不认识的符号,比如:è½½_幻灯片模板下载 -【优å,这就是乱码造成的
我们可以通过改变编码方式来解决:

# 导入请求模块
import requests
# 忽略警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}

url = 'https://www.ypppt.com/moban/'

# 请求网址获得响应
res = requests.get(url, headers=headers, verify=False)
# 编码改成utf-8
res.encoding = 'utf-8'
print(res.text)

在这里插入图片描述

🚲1. 获取下载页面链接

我们可以通过正则表达式来获取PPT的下载页面链接

Python 的 re 模块是一个用于正则表达式操作的内置库,它提供了丰富的功能来处理字符串和模式匹配。正则表达式是一种用于字符串搜索和操作的强大工具,它们使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。


re 模块的一些常用功能和方法:

  1. 模式匹配 (re.match(), re.search(), re.findall(), re.finditer(), re.match()):这些方法用于在字符串中查找与正则表达式模式相匹配的子串。
  2. 字符串替换 (re.sub(), re.subn()):用于替换字符串中的匹配项。
  3. 捕获组:正则表达式中的圆括号 () 用于创建捕获组,允许你捕获匹配表达式的部分内容。
  4. 编译正则表达式 (re.compile()):允许你编译一个正则表达式模式,然后使用编译后的模式进行匹配和其他操作。
  5. 特殊序列:如 \d 表示数字,\w 表示字母、数字或下划线,. 表示任意单个字符等。
  6. 量词:如 * 表示0次或多次,+ 表示1次或多次,? 表示0次或1次,{m,n} 表示m到n次。
  7. 贪婪与非贪婪:默认情况下,量词是贪婪的,尽可能多地匹配字符。添加一个问号 ? 可以使量词变为非贪婪的,尽可能少地匹配字符。
  8. 特殊字符转义:使用反斜杠 \ 来转义正则表达式中的特殊字符,如 . 匹配字面意义上的点(.)。
  9. 正则表达式标志:如 re.IGNORECASE 或 re.I 用于忽略大小写,re.MULTILINE 或 re.M 用于多行匹配。
# 导入请求模块
import requests
import re
# 忽略警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}

url = 'https://www.ypppt.com/moban/'

# 请求网址获得响应
res = requests.get(url, headers=headers, verify=False)
# 提取数据
res.encoding = 'utf-8'  # 编码改成utf-8
# print(res.text)
pptId = re.findall('href="/article/.*?/(.*?).html" class="p-title"', res.text)
print(pptId)

在这里插入图片描述
👊构造PPT下载页面链接

for i in pptId:
    # 构造新的链接
    url = 'https://www.ypppt.com/p/d.php?aid=' + i
    print(url)

在这里插入图片描述
注意:构造出来的链接不是PPT的下载链接,这是PPT下载页面链接。

❤️1.2 第二个爬虫
for i in pptId:
    # 构造新的链接
    url1 = 'https://www.ypppt.com/p/d.php?aid=' + i
    # print(url)
    res1 = requests.get(url1, headers=headers, verify=False)
    print(res1.text)

在这里插入图片描述
在第二次请求的时候我们就可以获取PPT模版的下载地址,接下来就和上面的数据提取一样,利用正则表达式将我们的PPT下载链接提取出来即可。

for i in pptId:
    # 构造新的链接
    url1 = 'https://www.ypppt.com/p/d.php?aid=' + i
    # print(url)
    res1 = requests.get(url1, headers=headers, verify=False)
    # print(res1.text)
    # 提取数据
    down_url = re.findall('href="(.*?)">下载地址1</a>', res1.text)[0]
    print(down_url)

在这里插入图片描述
我们发现我们获取的链接的后缀名是不同的,另外这些PPT都是没有名字的,不方便后续保存。所以这里我们要修改一下,不单单只获取PPT的编号,还需要获取PPT的标题,根据标题等信息作为保存PPT模版的文件名。

ppt_info = re.findall('href="/article/.*?/(.*?).html" class="p-title" target="_blank">(.*?)</a>', res.text)
print(ppt_info)

在这里插入图片描述
可以看到得到的数据是一个列表嵌套这元组,直接通过循环获取ID和标题即可。

ppt_info = re.findall('href="/article/.*?/(.*?).html" class="p-title" target="_blank">(.*?)</a>', res.text)
for i, title in ppt_info:
    # 构造新的链接
    url1 = 'https://www.ypppt.com/p/d.php?aid=' + i
    res1 = requests.get(url1, headers=headers, verify=False)
    # print(res1.text)
    # 提取数据
    down_url = re.findall('href="(.*?)">下载地址1</a>', res1.text)[0]
    print(title, down_url)

在这里插入图片描述
对于链接的后缀名的不同,我们可以对链接以 . 进行切割,然后取最后一个就是他的后缀名。

suffix = down_url.split(".")[-1]  # 获取后缀名

在这里插入图片描述

🚲1.3 第三个爬虫
res2 = requests.get(down_url, headers=headers, verify=False)

通过第三次请求去下载PPT模版。

🎈2. 文件保存
open(f'PPT模版/{title}-{i}.{suffix}', 'wb').write(res2.content)

这里为了避免文件名相同,我们在标题的后面加上他们的id号,文件的后缀名就是我们获取到的后缀名。

❤️1.4 翻页处理

要进行翻页处理,我们只需要观察不同页数的url的变化规律即可。
在这里插入图片描述
我们发现,除了第一页的url外,从第二页开始,url都是规律变化的,那首先我们可以尝试一下在第一页的url后面加上list-1.html,看是否可以访问,如果可以就直接加上,如果不可以,那我们就单独判断一下就可以了。
在这里插入图片描述
可以发现,加上后这个链接是无法访问的,所以我们只能单独的进行判断。

page = 1  # 页数, 从第一页开始
while True:
    if page == 1:
        # 第一页
        url = 'https://www.ypppt.com/moban/'
    else:
        # 从第二页开始
        url = f'https://www.ypppt.com/moban/list-{page}.html'
    # 请求网址获得响应
    res = requests.get(url, headers=headers, verify=False)
    # 提取数据
    res.encoding = 'utf-8'  # 编码改成utf-8
    # print(res.text)
    ppt_info = re.findall('href="/article/.*?/(.*?).html" class="p-title" target="_blank">(.*?)</a>', res.text)
    for i, title in ppt_info:
        # 构造新的链接
        url1 = 'https://www.ypppt.com/p/d.php?aid=' + i
        res1 = requests.get(url1, headers=headers, verify=False)
        # print(res1.text)
        # 提取数据
        down_url = re.findall('href="(.*?)">下载地址1</a>', res1.text)[0]
        suffix = down_url.split(".")[-1]  # 获取后缀名
        res2 = requests.get(down_url, headers=headers, verify=False)
        open(f'PPT模版/{title}-{i}.{suffix}', 'wb').write(res2.content)
    page += 1  # 爬完之后页数+1

到这里其实还有一个问题没有解决,除了以链接下载PPT模版外,还有通过百度网盘链接下载的,这个由于有些复杂,另外通过网盘下载的模版数量很少,这里我们可以直接跳过不下载。

if 'pan.baidu' in down_url:  # 百度网盘下载
    continue
else:
    suffix = down_url.split('.')[-1]  # 获取后缀名

🔥二、完整代码

# 导入请求模块
import requests
import re
# 忽略警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}

page = 1  # 页数, 从第一页开始
while True:
    if page == 1:
        # 第一页
        url = 'https://www.ypppt.com/moban/'
    else:
        # 从第二页开始
        url = f'https://www.ypppt.com/moban/list-{page}.html'
    # 请求网址获得响应
    res = requests.get(url, headers=headers, verify=False)
    # 提取数据
    res.encoding = 'utf-8'  # 编码改成utf-8
    # print(res.text)
    ppt_info = re.findall('href="/article/.*?/(.*?).html" class="p-title" target="_blank">(.*?)</a>', res.text)
    for i, title in ppt_info:
        # 构造新的链接
        url1 = 'https://www.ypppt.com/p/d.php?aid=' + i
        res1 = requests.get(url1, headers=headers, verify=False)
        # print(res1.text)
        # 提取数据
        down_url = re.findall('href="(.*?)">下载地址1</a>', res1.text)[0]
        if 'pan.baidu' in down_url:  # 百度网盘下载
            continue
        else:
            suffix = down_url.split('.')[-1]  # 获取后缀名
        res2 = requests.get(down_url, headers=headers, verify=False)
        open(f'PPT模版/{title}-{i}.{suffix}', 'wb').write(res2.content)
        print(f'已成功下载{title}-{i}.{suffix}')
    page += 1  # 爬完之后页数+1

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1660814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双向链表(详解)

在单链表专题中我们提到链表的分类&#xff0c;其中提到了带头双向循环链表&#xff0c;今天小编将详细讲下双向链表。 话不多说&#xff0c;直接上货。 1.双向链表的结构 带头双向循环链表 注意 这几的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;实际前面的在…

【神器来袭】快速解放双手,朋友圈自动转发工具,告别繁琐操作!

朋友圈作为一个重要的营销推广渠道&#xff0c;如果能实现自动转发&#xff0c;那对于很多企业或个人来说&#xff0c;是极好的。下面&#xff0c;就给大家分享一个实用且便捷的朋友圈运营工具——个微管理系统&#xff0c;让大家都能快速推广。 1、多账号登录&#xff0c;定时…

bcrypt.dll文件丢失怎么办?bcrypt.dll怎么修复?

在计算机系统运行过程中&#xff0c;如果发现无法找到或缺失bcrypt.dll文件&#xff0c;可能会引发一系列的问题与故障。首先&#xff0c;由于bcrypt.dll是系统中一个重要的动态链接库文件&#xff0c;它的主要功能可能涉及到系统核心服务、应用程序支持或者特定功能模块的运行…

python爬虫(三)之虎嗅网汽车文章爬虫

python爬虫&#xff08;三&#xff09;之虎嗅网汽车文章爬虫 闲来没事&#xff0c;闲鱼上有个好兄弟要我从虎嗅网上抓一些汽车文章的爬虫&#xff0c;于是大力出奇迹&#xff0c;我写了一个python程序&#xff0c;将这个网站上所有的汽车文章全部抓取下来了&#xff0c;存储到…

2024年记一次Mingw64-13.2.0编译Qt6.6.3,包含文档编译。

My C Development. 前言&#xff1a;不包含qtwebengine。 一、准备文件 &#xff08;1&#xff09;mingw64-13.2.0 下载链接&#xff1a;&#xff0c;ucrt64_13.2_ucrt_posix_rev6_msys2.7z【蓝奏云】。 &#xff08;2&#xff09;qt6.6.3源码 下载链接&#xff1a;Downlo…

电子版图书制作,一键转换可仿真翻页的画册

在数字化浪潮的冲击下&#xff0c;传统纸质图书逐渐被电子版图书取而代之。电子版图书以其便携、环保、更新快速等特点&#xff0c;吸引了越来越多的读者。制作一款既具备电子图书的便捷性&#xff0c;又能仿真翻页的画册&#xff0c;成为当下图书出版行业的新趋势 1.要制作电子…

微信小程序支付(完整版)-ThinkPHP/Uniapp

技术说明 1.前端&#xff1a;uniapp、vue3 2.接口&#xff1a;PHP8、ThinkPHP8、MySQL8.0 3.微信支付- PHP&#xff0c;官方示例文档 4.示例代码的模型及业务自己进行调整&#xff0c;不要一味的复制粘贴&#xff01;&#xff01;&#xff01; 流程说明 1.小程序调用接口…

资源管理游戏模版进入The Sandbox

我们非常高兴地向您介绍 Game Maker 的最新模板&#xff1a;资源管理游戏&#xff01; 这一全新的模板让您能够深入身临其境的游戏体验中&#xff0c;同时掌握令人兴奋的新机制。通过揭开模板的神秘面纱&#xff0c;您可以锤炼您的游戏设计技能。 什么是资源管理游戏&#xff1…

winpcap无法安装提示新版本已经安装-window11解决办法

winpcap无法安装提示新版本已经安装-window11解决办法 问题解决办法 问题 安装ensp的时候跳出来这个问题&#xff0c;说自己的winpcap没安装&#xff0c;建议安装 但当自己去安装一个winpcap的时候&#xff0c;它又跳出来这个&#xff01; WinPcap 4.1.3 Setup A newer versi…

电脑设置在哪里打开?Window与Mac双系统操作指南

随着科技的不断发展&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;对于许多初学者来说&#xff0c;如何找到并熟悉电脑的设置界面可能是一个挑战。特别是对于那些同时使用Windows和Mac双系统的用户来说&#xff0c;更是需要一篇详尽的指南来…

android进阶-AIDL

参考&#xff1a;Android进阶——AIDL详解_android aidl-CSDN博客 AIDL&#xff08;Android 接口定义语言&#xff09;&#xff0c;可以使用它定义客户端与服务端进程间通信&#xff08;IPC&#xff09;的编程接口&#xff0c;在 Android 中&#xff0c;进程之间无法共享内存&…

latex algorithm2e 库学习总结

案例1 \documentclass{article}\usepackage{xeCJK} \usepackage[]{algorithm2e} %\usepackage{ctex} % 中文包\begin{document}\renewcommand{\algorithmcfname}{算法} % 把标题设置为“算法” \begin{algorithm…

数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库(20240507)

数据库管理184期 2024-05-07 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20240507&#xff09;1 JSON需求2 关系型表设计3 JSON关系型二元性视图3 查询视图总结 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20…

雪花算法生成全局Id,看这篇就够了

分布式id 雪花算法能够生成一个64位long类型数据&#xff0c;适合做分布式系统的全局标识符&#xff0c;或者分库分表中&#xff0c;同类型数据表的主键 原理探究 雪花算法&#xff1a;以一台服务器为对象&#xff0c;在一毫秒时间内&#xff0c;生成一个自增的long数据特点…

Ps 滤镜:视频

Ps菜单&#xff1a;滤镜/视频 Filter/Video “视频”滤镜子菜单中包含了“NTSC 颜色”和“逐行”两个滤镜。 这两个滤镜都是针对视频和电视播放的特定需求设计的。 “逐行”滤镜主要解决交错视频的视觉问题&#xff0c;而“NTSC 颜色”滤镜则确保色彩在电视播放时的兼容性和准确…

springboot+vue+mysql老年大学会员管理系统+PPT+论文+讲解+售后

现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本老粘大学会员管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…

HTML4(二)

文章目录 1 开发者文档2 基本标签2.1 排版标签2.2 语义化标签2.3 行内元素与块级元素2.4 文本标签2.5 常用标签补充 3 图片标签4 超链接标签4.1 跳转页面4.2 跳转文件4.3 跳转锚点4.4 唤起指定应用 5 列表5.1 有序列表5.2 无序列表5.3 自定义列表 6 表格6.1 基本结构6.2 表格标…

如何查看页面对应的Selenium定位参数

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

IO 5.10

在一个进程中&#xff0c;创建一个子线程。 主线程负责&#xff1a;向文件中写入数据 子线程负责&#xff1a;从文件中读取数据 要求使用线程的同步逻辑&#xff0c;保证一定在主线程向文件中写入数据成功之后&#xff0c;子线程才开始运行&#xff0c;去读取文件中的数据#incl…

bean在java中什么意思?这篇文章带你详细了解

bean在java中什么意思&#xff1f;这篇文章带你详细了解 在Java的世界里&#xff0c;你可能会经常听到“Bean”这个词。它听起来像咖啡豆&#xff0c;但实际上与咖啡无关。那么&#xff0c;Java Bean到底是什么呢&#xff1f; 简单来说&#xff0c;Bean是一种特殊的Java类&…