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 标注…

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;分布式部署就显得尤为…

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修改桌面背景…

记录|如何打包C#项目

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

【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 改…

微信小程序-应用,页面和组件生命周期总结

情景1&#xff1a;小程序冷启动时候的顺序 情景2: 使用navigator&#xff08;保留并打开另一个页面&#xff09;和redirect&#xff08;关闭并打开另一个页面&#xff09;的执行顺序 情景3&#xff1a;切后台和切前台

Linux——组管理和权限管理

目录 组管理 Linux 组基本介绍 文件/目录所有者 组的创建 查看&修改文件/目录所在组 改变用户所在组 权限管理 基本介绍 rwx 文件/目录权限详解 chmod 修改文件或目录权限 chown 修改文件所有者 组管理 Linux 组基本介绍 关于第二张图中问题&#xff0c;答案…

【Qt】Qt的坐标转换(mapToGlobal)

1、QPoint QWidget::mapToGlobal(const QPoint &pos) const 将小部件坐标转换为全局坐标。mapToGlobal(QPoint(0,0))可以得到小部件左上角像素的全局坐标。2、QPoint QWidget::mapToParent(const QPoint &pos) const 将小部件坐标转换为父部件坐标。如果小部件没有父部…

Jmeter之count函数

counter函数 1、功能解释 count函数--计数器&#xff0c;每调用这个函数一次&#xff0c;它就会自动加1。它有两个参数&#xff0c;第一个参数是布尔型的&#xff0c;只能设置成 “TRUE”或者“FALSE”&#xff0c;如果是TRUE&#xff0c;那么每个用户有自己的计数器&#xf…

常用的网络爬虫工具推荐

在推荐常用的网络爬虫工具时&#xff0c;我们可以根据工具的易用性、功能强大性、用户口碑以及是否支持多种操作系统等多个维度进行考量。以下是一些常用的网络爬虫工具推荐&#xff1a; 1. 八爪鱼 简介&#xff1a;八爪鱼是一款免费且功能强大的网站爬虫&#xff0c;能够满足…