Python爬虫(4) --爬取网页图片

文章目录

  • 爬虫
  • 爬取图片
    • 指定url
    • 发送请求
    • 获取想要的数据
    • 数据解析
      • 定位想要内容的位置
      • 存放图片
  • 完整代码实现
  • 总结

爬虫

Python 爬虫是一种自动化工具,用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持(如 requests、BeautifulSoup、Scrapy 等)而成为实现爬虫的首选语言之一。

Python爬虫获取浏览器中的信息,实际上是模仿浏览器上网的行为。上一篇中,我们尝试着爬取了一个网站页面的文本内容,完成获取信息需要完成四步:

  1. 指定url
  2. 发送请求
  3. 获取你想要的数据
  4. 数据解析

这次我们来试试用同样的方法爬取网站页面的图片看看可以成功吗?

爬取图片

我们来试试爬取下面网页,每本书的封面图片:

https://book.douban.com/tag/%E6%97%85%E8%A1%8C

指定url

打开开发者控制台,找到页面的url:

url = "https://book.douban.com/tag/%E6%97%85%E8%A1%8C"

发送请求

进行UA伪装给自己一个访问身份,requests()发送请求:

import fake_useragent
import requests
head = {"User-Agent": fake_useragent.UserAgent().random
}
response = requests.get(url, headers=head)

获取想要的数据

#以文本形式,接受获得来的数据
res_text = response.text

数据解析

from lxml import etree
tree = etree.HTML(res_text)	#将获取来的数据解析

定位想要内容的位置

#属性定位,定位到所有的li
li_list = tree.xpath("//ul[@class='subject-list']/li")

遍历所有的li标签,定位拿取图片的位置:

我们可以看到,在li标签中,图片的存放是链接形式的,拿取到链接后我们要再次向它的位置进行访问:

在这里插入图片描述

for li in li_list:	#遍历每一个li标签pic_url = "".join(li.xpath("./div[1]/a/img/@src"))	#拿到图片链接pic_res = requests.get(pic_url,headers=head)	#发送请求pic_content = pic_res.content	#图片的存储,用content接收

存放图片

拿到图片内容后,我们要将它们存放起来:

如何快速建立一个文件夹呢?

os.path 是 Python 标准库 os 模块中的一个子模块,它提供了丰富的函数用于处理文件路径。这些函数可以帮助你执行路径的拼接、分割、查询等操作,而不需要担心操作系统的差异(例如,Windows 和 UNIX/Linux 在路径表示上的差异)。

import os.path		#导入包

使用:

pic_name = 0	#给存放的名字编号取名
if not os.path.exists("./picLib"):		#os.path.exists:检查path是否存在os.mkdir("./picLib")		#如果不存在,创建一个"./picLib"with open(f"./picLib/{pic_name}.jpg", "wb") as fp:  #{pic_name}.jpg,每次遍历pic_name都发生变化,故此让存放的图片名字不一样fp.write(pic_content)pic_name += 1

完整代码实现

import os.path
import fake_useragent
import requests
from lxml import etreeif __name__ == '__main__':# 1、UA伪装head = {"User-Agent": fake_useragent.UserAgent().random}pic_name = 0url = f"https://book.douban.com/tag/%E6%97%85%E8%A1%8C"# 2、发出请求response = requests.get(url, headers=head)# 3、获取数据res_text = response.texttree = etree.HTML(res_text)# 4、数据解析li_list = tree.xpath("//ul[@class='subject-list']/li")# print(li_list)if not os.path.exists("./picLib"):os.mkdir("./picLib")for li in li_list:pic_url = "".join(li.xpath("./div[1]/a/img/@src"))pic_res = requests.get(pic_url,headers=head)pic_content = pic_res.contentwith open(f"./picLib/{pic_name}.jpg", "wb") as fp:fp.write(pic_content)pic_name += 1

爬取成功显示:

找到创建的文件夹,点击查看图片,图片已经存放进去。

在这里插入图片描述

总结

本篇介绍了,如何爬取网页内的图片信息:

  1. 指定url
  2. 发送请求
  3. 获取你想要的数据
  4. 数据解析

特别注意:

在开发者控制台中,图片的存放是链接形式的,拿取到链接后我们需要再次向它的位置进行访问(发送请求)、获取想要的数据。

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

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

相关文章

科普文:后端性能优化的实战小结

一、背景与效果 ICBU的核心沟通场景有了10年的“积累”,核心场景的界面响应耗时被拉的越来越长,也让性能优化工作提上了日程,先说结论,经过这一波前后端齐心协力的优化努力,两个核心界面90分位的数据,FCP平…

Day05-readinessProbe探针,startupProbe探针,Pod生命周期,静态Pod,初始化容器,rc控制器的升级和回滚,rs控制器精讲

Day05-readinessProbe探针,startupProbe探针,Pod生命周期,静态Pod,初始化容器,rc控制器的升级和回滚,rs控制器精讲 0、昨日内容回顾1、readinessProbe可用性检查探针之exec案例2、可用性检查之httpGet案例3…

[数据集][目标检测]躺坐站识别检测数据集VOC+YOLO格式9488张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):9488 标注数量(xml文件个数):9488 标注数量(txt文件个数):9488 标注…

「Vue组件化」封装SVG图标

Vue组件化,封装SVG图标。支持uniapp等vue版本。 前言 设计思路 创建SVG组件: 首先创建一个用于加载SVG文件的Vue组件。 SVG文件组织: 将SVG文件放在项目的某个目录下,例如components/svgIcon/。 SVG组件注册: 创建一个函数来动态导入SVG文件,并注册到Vue组件中。 使用S…

Python每日学习

我是从c转来学习Python的&#xff0c;总感觉和c相比Python的实操简单&#xff0c;但是由于写c的代码多了&#xff0c;感觉Python的语法好奇怪 就比如说c的开头要有库&#xff08;就是类似于#include <bits/stdc.h>&#xff09;而且它每一项的代码结束之后要有一个表示结…

C语言 | Leetcode C语言题解之第242题有效的字母异位词

题目&#xff1a; 题解&#xff1a; bool isAnagram(char* s, char* t) {int len_s strlen(s), len_t strlen(t);if (len_s ! len_t) {return false;}int table[26];memset(table, 0, sizeof(table));for (int i 0; i < len_s; i) {table[s[i] - a];}for (int i 0; i &…

EMQX 跨域集群:增强可扩展性,打破地域限制

跨域集群的概念 提到 EMQX&#xff0c;人们通常首先会想到它的可扩展性。尽管 EMQX 能随着硬件数量的增加几乎实现线性扩展&#xff0c;但在单个计算实例上的扩展能力终究有限&#xff1a;资源总会耗尽&#xff0c;升级成本也会急剧上升。这时&#xff0c;分布式部署就显得尤为…

HOW - CSS 定义颜色值

目录 1. 十六进制颜色 (Hexadecimal Color)2. RGB 颜色 (RGB Color)3. HSL 颜色 (HSL Color)HSL 颜色模式示例 4. 预定义颜色名 (Named Colors)5. LCH 颜色 (LCH Color)6. Lab 颜色 (Lab Color)7. HWB 颜色 (HWB Color)8. CSS 颜色函数 (Color Function)9. CSS4 颜色模块中的其…

JavaScript(11)——对象

对象 声明&#xff1a; let 对象名 { 属性名&#xff1a;属性值, 方法名&#xff1a;函数 } let 对象名 new Object() 对象的操作 先创建一个对象 let op {name:jvav,id:4,num:1001} 查 对象名.属性 console.log(op.name) 对象名[属性名] 改 对象名.属性 新值 op.name …

Pytorch学习笔记day4——训练mnist数据集和初步研读

该来的还是来了hhhhhhhhhh&#xff0c;基本上机器学习的初学者都躲不开这个例子。开源&#xff0c;数据质量高&#xff0c;数据尺寸整齐&#xff0c;问题简单&#xff0c;实在太适合初学者食用了。 今天把代码跑通&#xff0c;趁着周末好好的琢磨一下里面的各种细节。 代码实…

Spring MVC的高级功能——拦截器(三)拦截器的执行流程

一、单个拦截器的执行流程 如果在项目中只定义了一个拦截器&#xff0c;单个拦截器的执行流程如图所示。 二、单个拦截器的执行流程分析 从单个拦截器的执行流程图中可以看出&#xff0c;程序收到请求后&#xff0c;首先会执行拦截器中的preHandle()方法&#xff0c;如果preHa…

bug诞生记——动态库加载错乱导致程序执行异常

大纲 背景问题发生问题猜测和分析过程是不是编译了本工程中的其他代码是不是有缓存是不是编译了非本工程的文件是不是调用了其他可执行文件查看CMakefiles分析源码检查正在运行程序的动态库 解决方案 这个案例发生在我研究ROS 2的测试Demo时发生的。 整体现象是&#xff1a;修改…

聊一聊前端动画的种类,以及动画的触发方式有哪些?

引言 动画在前端开发中扮演着重要的角色。它不仅可以提升用户体验&#xff0c;还可以使界面更加生动和有趣。在这篇文章中&#xff0c;我们将深入探讨前端动画的各种实现方式&#xff0c;包括 CSS 动画、JavaScript 动画、SVG 动画等。我们还将讨论一些触发动画的方式和动画在…

【MQTT(2)】开发一个客户端,ubuntu版本

基本流程如下&#xff0c;先生成Mosquitto的库&#xff0c;然后qt调用库进行开发界面。 文章目录 0 生成库1 有界面的QT版本2 无界面版本 0 生成库 下载源码&#xff1a;https://github.com/eclipse/mosquitto.git 编译ubuntu 版本很简单&#xff0c;安装官方说明直接make&am…

rk3568 OpenHarmony4.1 Launcher定制开发—桌面壁纸替换

Launcher 作为系统人机交互的首要入口&#xff0c;提供应用图标的显示、点击启动、卸载应用&#xff0c;并提供桌面布局设置以及最近任务管理等功能。本文将介绍如何使用Deveco Studio进行单独launcher定制开发、然后编译并下载到开发板&#xff0c;以通过Launcher修改桌面背景…

Webpack 5 Tree Shaking与Module Federation

Webpack是一个流行的JavaScript模块打包器&#xff0c;它在前端工程化中扮演着核心角色。Webpack 5引入了许多新特性&#xff0c;其中两个最值得关注的是Tree Shaking和Module Federation。这两个特性分别解决了代码体积优化和微前端架构的问题。接下来&#xff0c;我们将深入探…

记录|如何打包C#项目

参考文章&#xff1a; c#窗体应用程序怎么打包 经过检验确实有效 Step1. 生成发布文件 在Visual Studio的菜单中&#xff0c;找到“生成”->“发布” 第一次会有个向导&#xff0c;基本上一路next下来既可以 最后&#xff0c;点击完成即可以 Step2. 获得publish文件 自…

软考高级第四版备考--第28天(度量绩效域)

核心概念&#xff1a; 度量绩效域涉及评估项目绩效和采取应对措施相关的活动和职能&#xff1b; 有效执行此绩效域将产以下预期目标&#xff1a; 对项目状况充分理解&#xff1b;数据充分&#xff0c;可支持决策&#xff1b;及时采取行动&#xff0c;确保项目最佳绩效&#…

【JavaEE】AQS原理

本文将介绍AQS的简单原理。 首先有个整体认识&#xff0c;全称是 AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架。常用的ReentrantLock、Semaphore、CountDownLatch等都有实现它。 本文参考&#xff1a; 深入理解AbstractQueuedSynchronizer只需…

[C++]TinyWebServer

TinyWebServer 文章目录 TinyWebServer1 主体框架2 Buffer2.1 向Buffer写入数据2.2 从Buffer读取数据2.3 动态扩容2.4 从socket中读取数据2.5 具体实现 3 日志系统3.1 生产者-消费者模型3.2 数据一致3.3 代码 4 定时器4.1 调整堆中元素操作4.2 堆的操作4.2.1 增4.2.2 删4.2.3 改…