Python爬虫实战案例(爬取图片)

爬取图片的信息

爬取图片与爬取文本内容相似,只是需要加上图片的url,并且在查找图片位置的时候需要带上图片的属性。

这里选取了一个4K高清的壁纸网站(彼岸壁纸https://pic.netbian.com)进行爬取。

具体步骤如下:

  • 第一步依然是进入这个页面,这个壁纸网站分为好几种类型的壁纸图片,点击一个你想要爬取的类型,然后按F12,从中获取URL请求方式(复制URL,会用到),这次就不用网页的"User-Agent’'了,用pycharm包中别人写好的。
    然后发送我们的请求并获取这个网页的数据
    在这里插入图片描述
# url
url = "https://pic.netbian.com/4kmeinv/"
# UA伪装 用下载好的库中别人写好的UA
head = {"User-Agent": fake_useragent.UserAgent().random}
# 发送请求
response = requests.get(url, headers=head)
# 获取想要的数据
res_text = response.text
  • 第二步打开元素栏,用左上角的寻找工具放在图片上,定位到元素栏中对应的标签,用数据分析的方法获取到图片信息。
    其实每一张图片的排放就好像是一个个列表,其所有的信息都粗存在元素栏中的li标签中,我们想要获取多张照片,首先需要先将这些li标签都获取下来。
    在这里插入图片描述
# 数据解析 获取所有的li标签,并存放在li_list中
tree = etree.HTML(res_text)
li_list = tree.xpath("//div[@class='slist']/ul/li")
  • 第三步获取图片与获取文本内容不同的是,需要再获取图片的url,图片的url就在上图箭头所指的位置,但是这个仅仅只是图片在这个板块的位置,所以前面需要在前面加上这个壁纸网站的地址,这样获取的图片信息才是完整的,可以被打开。
    因为先前已经将存放图片信息的li标签都存放在了li_list中,所以我们就用for循环遍历这个列表,以便获取更多的图片信息。
 for li in li_list:# 图片的urlimg_url = "https://pic.netbian.com" + "".join(li.xpath("./a/img/@src"))# 发送请求img_response = requests.get(img_url, headers=head)# 获取想要的数据img_content = img_response.content
  • 第四步将获取到的图片存放在文件夹中
# pic_name = 0 这次的代码封装在函数中,将这个变量放在了函数外面,给获取的图片编号
# 将pic_name定义为全局变量,方便调用
global pic_namewith open(f"./picLibbb/{pic_name}.jpg", "wb") as fp:fp.write(img_content)pic_name += 1
  • 第五步为了获取更多的照片,因为每一页能展示的照片有限,所以我们需要for循环遍历每一页的网址;
    每一页的网址都只是在页面数量上的差别,所以可以遍历。

第一页的网址
在这里插入图片描述
第二页的网址

在这里插入图片描述
第三页的网址

在这里插入图片描述

url = "https://pic.netbian.com/4kmeinv/"request_pic(url)for i in range(1,10):next_url = f"https://pic.netbian.com/4kmeinv/index_{i}.html"request_pic(next_url)

完整代码:

# 获取图片数据
import os.path
import fake_useragent
import requests
from lxml import etree# UA伪装
head = {"User-Agent": fake_useragent.UserAgent().random}pic_name = 0
def request_pic(url):# 发送请求response = requests.get(url, headers=head)# 获取想要的数据res_text = response.text# 数据解析tree = etree.HTML(res_text)li_list = tree.xpath("//div[@class='slist']/ul/li")for li in li_list:# 图片的urlimg_url = "https://pic.netbian.com" + "".join(li.xpath("./a/img/@src"))# 发送请求img_response = requests.get(img_url, headers=head)# 获取想要的数据img_content = img_response.contentglobal pic_namewith open(f"./picLib/{pic_name}.jpg", "wb") as fp:fp.write(img_content)pic_name += 1if __name__ == '__main__':# 创建存放照片的文件夹if not os.path.exists("./picLib"):os.mkdir("./picLibbb")# 网站的urlurl = "https://pic.netbian.com/4kdongman/"request_pic(url)for i in range(1,10):next_url = f"https://pic.netbian.com/4kmeinv/index_{i}.html"request_pic(next_url)

爬取后的效果如下:
在这里插入图片描述

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

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

相关文章

Unity ShaderLab基础

[原文1] [参考2] 一 基础知识 1. 1 着色器语言分类: 语言说明HLSL基于 OpenGL 的 OpenGL Shading LanguageGLSL基于 DirectX 的 High Level Shading LanguageCGNVIDIA 公司的 C for GraphicShader LabUnity封装了CG,HLSL,GLSL的Unity专用着色器语言,具有跨平台,图形化编程,便…

Java面试八股之Spring boot的自动配置原理

Spring boot的自动配置原理 Spring Boot 的自动配置原理是其最吸引人的特性之一,它大大简化了基于 Spring 框架的应用程序开发。以下是 Spring Boot 自动配置的基本原理和工作流程: 1. 启动类上的注解 Spring Boot 应用通常会在主类上使用 SpringBoot…

react中路由跳转以及路由传参

一、路由跳转 1.安装插件 npm install react-router-dom 2.路由配置 路由配置:react中简单的配置路由-CSDN博客 3.实现代码 // src/page/index/index.js// 引入 import { Link, useNavigate } from "react-router-dom";function IndexPage() {const …

elasticsearch-7.3.1安装注意事项

elasticsearch-7.3.1安装注意事项 一、背景二、步骤1、查看原ES版本2、新环境服务器2.1、是否有elasticsearch2.2、安装elasticsearch2.3、配置参数2.4、启动elasticsearch2.5、设置密码 三、报错-问题总结1、jdk不适用2、bootstrap checks failed3、Address already in use4、…

栈和队列(C语言)

栈的定义 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:…

20分钟上手新版Skywalking 9.x APM监控系统

Skywalking https://skywalking.apache.org/ Skywalking是专为微服务、云原生和基于容器的(Kubernetes)架构设计的分布式系统性能监控工具。 Skywalking关键特性 ● 分布式跟踪 ○ 端到端分布式跟踪。服务拓扑分析、以服务为中心的可观察性和API仪表板。…

【stm32项目】基于stm32智能宠物喂养(完整工程资料源码)

基于STM32宠物喂养系统 前言: 随着人们生活幸福指数的提高,越来越多的家庭选择养宠物来为生活增添乐趣。然而,由于工作等原因,许多主人无法及时为宠物提供充足的食物与水。为了解决这一问题,我设计了一款便捷的宠物喂…

linux C++ onnxruntime yolov8 视频检测Demo

linux C onnxruntime yolov8 视频检测Demo 目录 项目目录 效果 ​编辑CMakeLists.txt 代码 下载 项目目录 效果 ./yolov8_demo --help ./yolov8_demo -c2 -ptrue ./yolov8_demo -c1 -strue CMakeLists.txt # cmake needs this line cmake_minimum_required(VERSION 3…

vim gcc

vim 使用 vs filename 分屏 ctrl ww 切窗口 shift zz 快速提出vim vim配置 vim启动时自动读取当前用户的家目录的.vimrc文件 vim配置只影响本用户 其他用户观看同一文件不受影响 gcc指令 & c文件编译过程 动态库 静态库 & 链接方式 有相应库才能进行…

【机器学习】不同操作系统下如何安装Jupyter Notebook和Anaconda

引言 Jupyter Notebook 是一个非常流行的开源Web应用程序,允许你创建和共享包含代码、方程、可视化和解释性文本的文档 文章目录 引言一、如何安装Jupyter Notebook1.1 对于Windows用户1.2 对于macOS用户1.3 对于Linux用户: 二、如何安装Anaconda2.1 对于…

css气泡背景特效

css气泡背景特效https://www.bootstrapmb.com/item/14879 要创建一个CSS气泡背景特效,你可以使用CSS的伪元素(:before 和 :after)、border-radius 属性来创建圆形或椭圆形的“气泡”,以及background 和 animation 属性来设置背景…

基于 Electron+Vite+Vue3+Sass 框架搭建

技术参考 技术描述Electron一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。嵌入 Chromium 和 Node.jsElectron Forge用于打包和分发 Electron 应用程序的一体化工具。英文地址在此Vite前端构建工具Vue3用于构建用户界面的 JavaScript 框架vitejs/plugin-vueVite 插…

java基础-String

之前有很长时间没进行更新了,现在开始会重新进行java基础的学习,所以会开始进行java基础方面的更新,今天会进行string字符串的学习。 String在底层被final(声明的变量或者对象不可以扩展/改变)修饰,故其不可变。其底层采用的是字符…

springboot集成redis之字典缓存

什么是redis的字典缓存? Redis的缓存是Redis内部用于存储键值对数据结构的一种基础数据结构。在Redis中,所有的键值对都是通过字典这种数据结构来存储的。字典在Redis中扮演着核心角色,因为它不仅用于数据库中的键值对存储,还用于…

Postman设置全部请求都携带请求头,Postman如何一次性设置请求头、不需要一个请求一个请求去添加请求头

文章目录 一、问题描述二、解决办法三、应用场景 一、问题描述 现在我有 n 个接口测试,其中 n 个都需要携带一致的请求头(其实一般都是携带 JWT 令牌),怎么办?我要一个一个写?如图: 二、解决办…

go语言Gin框架的学习路线(十)

目录 GORM的CRUD教程 查询 普通查询 定义 User 结构体 查询所有用户 查询第一个用户 总结 条件查询 内联条件 额外查询选项 高级查询 链式操作 Scopes 多个立即执行方法 GORM的CRUD教程 CRUD 是 "Create, Read, Update, Delete"(创建、查询…

[经验] 驰这个汉字的拼音是什么 #学习方法#其他#媒体

驰这个汉字的拼音是什么 驰,是一个常见的汉字,其拼音为“ch”,音调为第四声。它既可以表示动词,也可以表示形容词或副词,意义广泛,经常出现在生活和工作中。下面就让我们一起来了解一下“驰”的含义和用法。…

以Zookeeper为例 浅谈脑裂与奇数节点问题

一、脑裂现象的定义与影响 脑裂(split-brain)是指在分布式系统中,因网络分区或其他故障导致系统被切割成两个或多个相互独立的子系统,每个子系统可能独立选举出自己的领导节点。这一现象在依赖中心领导节点(如Elastic…

【Qt 】JSON 数据格式详解

文章目录 1. JSON 有什么作用?2. JSON 的特点3. JSON 的两种数据格式3.1 JSON 数组3.2 JSON 对象 4. Qt 中如何使用 JSON 呢?4.1 QJsonObject4.2 QJsonArray4.3 QJsonValue4.4 QJsonDocument 5. 构建 JSON 字符串6. 解析 JSON 字符串 1. JSON 有什么作用? &#x…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第三十九章 Linux MISC驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…