python爬虫初体验(四)—— 百度文库PPT的爬取
文章目录
- 1. 安装包
- 2. 相关代码
- 3. 说明
- 4. 注意事项
- 5. 扩展功能
- 5.1 多页面下载
- 5.2 输入地址下载
在Python 2中编写一个爬虫来大量下载图片,可以使用requests库来发送HTTP请求,并使用BeautifulSoup来解析HTML页面。此外,可以使用urllib2库来下载图片。lxml 是一个 Python 库,用于处理 XML 和 HTML 文档。它提供了高效的 XML/HTML 解析和生成工具,是处理 Web 页面内容的常用工具之一。
1. 安装包
pip install requests
pip install beautifulsoup4
pip install lxml
pip install urllib2
2. 相关代码
下面是一个相关代码,演示如何从一个网页中下载图片:
# -*- coding: utf-8 -*-
import requests
import os
import urllib2
from lxml import etree# 创建目录函数
def create_file(file_path):# 如果目录不存在,则创建目录if not os.path.exists(file_path):os.makedirs(file_path)# 下载图片函数
def download_image(url, path):try:# 使用 urllib2 打开 URL 并获取响应response = urllib2.urlopen(url)# 以二进制写模式打开文件,并写入响应内容with open(path, 'wb') as f:f.write(response.read())except Exception as e:# 如果发生异常,打印错误信息print("Failed to download image: {}".format(url))print("Error: ", str(e))# 从网页中抓取图片的函数
def fetch_images_from_page(url):# 使用 requests 发送 GET 请求获取网页内容resp = requests.get(url)# 解析网页文本text = resp.text# 使用 lxml 解析 HTML 文档html = etree.HTML(text)# 通过 XPath 获取包含图片的元素列表img_list = html.xpath('//div[@class="mod flow-ppt-mod"]/div/div/img')# 初始化计数器cnt = 1# 目标文件路径file_path = './ppt/'# 创建目标文件夹create_file(file_path)# 遍历图片元素列表for i in img_list:try:# 尝试获取图片的 src 属性img_url = i.xpath('./@src')[0]except IndexError:# 如果 src 属性不存在,则尝试获取 data-src 属性img_url = i.xpath('./@data-src')[0]# 构建图片文件名file_name = '%s/page_%d.jpg' % (file_path, cnt)# 下载图片download_image(img_url, file_name)# 输出下载成功的提示信息print("Downloaded: {}".format(file_name))# 增加计数器cnt += 1# 主函数
def main():# 目标网页 URLurl = 'https://wenku.baidu.com/view/c784625f1a2e453610661ed9ad51f01dc3815771.html'# 调用抓取图片的函数fetch_images_from_page(url)# 如果当前模块是主程序,则执行 main 函数
if __name__ == '__main__':main()
3. 说明
- 导入模块:导入必要的模块 requests、os、urllib2 和 lxml.etree。
- 创建目录函数:create_file 用于创建指定的目录。
- 下载图片函数:download_image 用于下载图片并保存到本地。
- 从网页中抓取图片的函数:fetch_images_from_page 用于从指定网页抓取图片并下载到本地。
- 主函数:main 用于定义入口 URL 并调用抓取图片的函数。
4. 注意事项
- 图片URL:确保图片的URL是绝对路径。如果是相对路径,需要拼接成绝对路径。
- 错误处理:添加了异常处理逻辑,以处理下载过程中可能出现的错误。
- 文件路径:确保保存图片的路径正确,并且有写入权限。
- XPath 表达式:使用 XPath 表达式从网页中提取图片元素。
5. 扩展功能
5.1 多页面下载
如果你需要从多个页面下载图片,可以将页面的URL放入一个列表中,并循环处理每个页面。
def main():# 目标URL列表urls = ['https://example.com/images1', 'https://example.com/images2']# 抓取并下载图片for url in urls:fetch_images_from_page(url)if __name__ == '__main__':main()
5.2 输入地址下载
如果你需要输入想要的地址,然后下载相对应的图片,需要使用raw_input
,raw_input
是一个内置函数,用于从标准输入(通常是键盘)读取一行文本,并返回一个字符串。这个函数不会执行任何类型的转换,返回的内容就是用户输入的原始字符串。
def main():url = raw_input('输入百度文库地址:')fetch_images_from_page(url)if __name__ == '__main__':main()
相关文章:

python爬虫初体验(四)—— 百度文库PPT的爬取
文章目录 1. 安装包2. 相关代码3. 说明4. 注意事项5. 扩展功能5.1 多页面下载5.2 输入地址下载 在Python 2中编写一个爬虫来大量下载图片,可以使用requests库来发送HTTP请求,并使用BeautifulSoup来解析HTML页面。此外,可以使用urllib2库来下载…...

下水道内缺陷识别检测数据集 yolo数据集 共2300张
下水道内缺陷识别检测数据集 yolo数据集 共2300张 下水道内部缺陷识别数据集(Sewer Interior Defect Recognition Dataset, SIDRD) 摘要 SIDRD 是一个专门针对下水道内部缺陷识别的数据集,旨在为城市基础设施维护和管理提供一个标准化的训练…...

年轻用户对Facebook的使用趋势分析
在社交媒体的蓬勃发展中,Facebook作为全球最大的社交平台之一,尽管面临着来自新兴平台的竞争,仍然在年轻用户中扮演着重要角色。然而,年轻用户对Facebook的使用方式和趋势却在不断变化。本文将探讨年轻用户对Facebook的使用趋势&a…...

EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析
随着信息技术的飞速发展和数字化时代的到来,电厂作为能源供应的重要枢纽,其安全性和管理效率成为社会各界关注的焦点。为了满足电厂对高效、智能、可靠视频监控系统的需求,基于EasyCVR平台建设的电厂视频监控系统应运而生。 一、系统构成 基…...

基于深度学习的情感生成与交互
基于深度学习的情感生成与交互是一个新兴的研究领域,旨在通过深度学习技术生成具有情感的反应,以增强人机交互的自然性和有效性。该技术涉及情感识别、自然语言处理、计算机视觉等多个领域,并在多个应用场景中展现出潜力。 情感生成的主要方…...

JavaScript匿名函数
引言 JavaScript是一种广泛使用的脚本语言,用于Web开发和其他领域。在JavaScript中,函数是非常重要的组成部分,它们允许开发者组织代码、复用代码以及执行特定的任务。本文将探讨一种特殊的函数类型——匿名函数,并介绍如何使用它…...

线性判别分析(LDA)中计算两个类的中心点在投影方向w上的投影示例
通过一个具体的例子,详细说明 w T μ 0 w^T \mu_0 wTμ0 和 w T μ 1 w^T \mu_1 wTμ1 如何表示两个类的中心点在投影方向 w w w 上的投影。 假设: 我们有两个类的数据集,均值向量 μ 0 \mu_0 μ0 和 μ 1 \mu_1 μ1ÿ…...

前端知识——标签知识
1.p段落标签 ——一个p标签表示一个段落 单独占一行 >p标签里面不可以嵌套其它的块级标签(div h1~h6 p等) 会导致浏览器自动分裂成两个标签 不规范的写法 >但是可以包裹span标签 2.span标签 ——包裹文字标签 可以和span一行显示 3.文本格式化标签 ——给…...

使用Docker和cpolar在Linux服务器上搭建DashDot监控面板
使用Docker和cpolar在Linux服务器上搭建DashDot监控面板 前言环境准备安装Docker下载Dashdot镜像 部署DashDot应用本地访问DashDot服务安装cpolar内网穿透固定DashDot公网地址结语 前言 在这个数字化飞速发展的时代,服务器作为支撑各种应用和服务的基础设施…...

解决docker拉取镜像报错
报错信息如下: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)网上试了很多方式,有的需要配置DNS解析&…...

C++之STL—deque容器
双端数组 区别于 vector (单端数组), 构造函数 注意:读取数据时,const修饰保证函数内只能读取,不能修改数据 void print(const deque<int>& deq) {for (deque<int>::const iterator it deq.begin(); it ! deq.e…...

leveldb前缀匹配查找Seek
个人随笔 (Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 参考:https://github.com/google/leveldb/blob/main/include/leveldb/db.h 参考:百度AI 1. 背景 最近偶然发现了,leveldb前缀匹配查找的功能。 之前没有从这个角度去想过See…...

【自动驾驶】ros如何隔绝局域网内其他电脑播包
1.问题 可能碰到自己播包的时候,别人播包的传到我们电脑上,导致无法分析问题,或者出现一些奇怪的现象。 2.解决 export ROS_LOCALHOST_ONLY1 在终端加上这句话,或者在~/.bashrc中添加,通过source ~/.bashrc使其生…...

MySQL程序
目录 MySQL程序 常用的MySQL的程序 mysqld程序 mysql客户端 客户端命令的常用的选项 配置文件 配置文件语法 MySQL客户端命令 编辑 .sql 文件中执行SQL语句 mysqlcheck (表维护程序) Mysqldump(数据库备份程序) mysql…...

吉林省自闭症寄宿学校:提供个性化培养方案
在吉林省的怀抱中,隐藏着一片温馨而特殊的天地——星贝育园自闭症儿童寄宿制学校。这里,不是简单的教育场所,而是无数自闭症儿童梦想启航的港湾,是他们感受爱、学习成长、绽放自我光芒的温馨家园。 自闭症,一个逐渐被…...

Java基础 — Java 虚拟机(上篇)
该文章属于Java进阶部分的JVM入门,本章讲述了JVM的历史、Java源代码到机器码的过程以及 Class字节码文件的内部结构等。 了解了这篇文章,能让你深入地了解JVM知识,保证在短时间内掌握JVM! JVM 入门教程(上篇࿰…...

C++ | Leetcode C++题解之第435题无重叠区间
题目: 题解: class Solution { public:int eraseOverlapIntervals(vector<vector<int>>& intervals) {if (intervals.empty()) {return 0;}sort(intervals.begin(), intervals.end(), [](const auto& u, const auto& v) {retur…...

AI编辑器CURSOR_CURSOR安装教程_使用AI进行编码的最佳方式。
一、CUROR简介 作为一个在代码海洋里遨游多年的老程序员,我得说,遇到CURSOR这位AI编辑器,就像是编程路上偶遇了一位智慧而又贴心的老友。 想象一下,夜深人静,你正埋头于那些错综复杂的逻辑和无尽的bug之中࿰…...

华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 10 推送实况窗消息
场景介绍 实况窗是一种帮助用户聚焦正在进行的任务,方便快速查看和即时处理的通知形态。有关实况窗简介、权限申请、开放场景、设计规范等说明,请参见Live View Kit简介。 通过Push Kit发送的实况窗消息支持三种操作类型,分别是: 实况窗消息操作类型 支持操作的场景类型 …...

探索 Go 语言程序实体:揭开神秘面纱
《探索 Go 语言程序实体:揭开神秘面纱》 在 Go 语言的世界里,程序实体是构建强大应用的基石。它们就像是魔法世界中的元素,各自有着独特的能力和用途。让我们一起深入探索 Go 语言程序实体的那些事儿。 一、什么是 Go 语言程序实体? 在 Go 语言中,程序实体是指可以被命…...

深入理解端口、端口号及FTP的基本工作原理
FTP是TCP/IP的一种具体应用,FTP工作在OSI模型的第七层,TCP模型的第四层上,即应用层,FTP使用的是传输层的TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的“三次握手”的过程,其…...

9.3 Linux_文件I/O_相关函数
打开与关闭 1、打开文件 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);返回值:成功返回文件描述符,失败返回EOF pathname:文件路径 flags:标志,其中O_RDO…...

点亮一个LED灯
一、任务分析 一个灯怎么样才会亮? 图中的小灯两端接正负极,小灯就会点亮,但是我们不能主动控制灯的亮灭,于是加入了开关。开关打开断开小灯正极,小灯就会熄灭,反之则点亮。 在板子上的灯是如何连接的&…...

分布式框架 - ZooKeeper
一、什么是微服务架构 1、单体架构 顾名思义一个软件系统只部署在一台服务器上。 在高并发场景中,比如电商项目,单台服务器往往难以支撑短时间内的大量请求,聪明的架构师想出了一个办法提高并发量:一台服务器不够就加一台&am…...

8月份,AI图像生成领域web端产品排行榜及产品是做什么的
看全球用户量级别的Top12(WEB)。 排名 产品名 分类 8月访问量 上月对比 1 Canva AI Design Tool 711.9M 6.48% 2 Remove.bg AI Image Editor 72.79M 2.84% 3 Fotor AI Image Editor 15.62M 2.34% 4 Civitai Model Training & …...

Sqlite_Datetime列选择三月的行
In SQLite, use the strftime function to extract components from a date/time value SELECT * FROM table WHERE strftime(%m, datemonth) 03;strftime(‘%m’, datemonth): extracts the month part from the datemonth column as a string (with leading zeros for sing…...

spring里面内置的非常实用的工具
一 、请求数据记录 Spring Boot提供了一个内置的日志记录解决方案,通过 AbstractRequestLoggingFilter 可以记录请求的详细信息。 AbstractRequestLoggingFilter 有两个不同的实现类,我们常用的是 CommonsRequestLoggingFilter。 通过 CommonsRequestL…...

计算机毕业设计 基于Python内蒙古旅游景点数据分析系统 Django+Vue 前后端分离 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...

centos7 docker部署nacos
1. 一行代码安装git yum -y install git 2. 下载最新版nacos源码: git clone https://github.com/nacos-group/nacos-docker.git 进入nacos-docker文件 cd nacos-docker 3.docker安装数据库Mysql8 按这个来就行,非常好 Docker安装mysql8-超详细、每…...

短视频矩阵源码/短视频矩阵系统搭建/源码开发知识分享
集星云推智剪获客系统,通过自主研发的高效发布模式,为企业提供稳定的接口与自动化操作,助力企业实现短视频矩阵的构建。该系统整合了十大核心功能,包括AI辅助文案撰写、视频剪辑、智能去重、内容拆分、文字转语音、文本提取、批量…...