【小白必看】Python爬虫实战之批量下载女神图片并保存到本地

文章目录

    • 前言
    • 运行结果
    • 部分图片
    • 1. 引入所需库
    • 2. 发送请求获取网页内容
    • 3. 解析网页内容并提取图片地址和名称
    • 4. 下载并保存图片
    • 完整代码
      • 关键代码讲解
    • 结束语

在这里插入图片描述

前言

爬取网络上的图片是一种常见的需求,它可以帮助我们批量下载大量图片并进行后续处理。本文将介绍如何使用 Python 编写一个简单的爬虫,从指定网页中获取女神图片,并保存到本地。

运行结果

在这里插入图片描述

部分图片

在这里插入图片描述

在这里插入图片描述

1. 引入所需库

在这里插入图片描述

首先需要导入两个库:requests 用于发送网络请求,lxml 用于解析和提取数据。

import requests
from lxml import etree

2. 发送请求获取网页内容

在这里插入图片描述

使用 requests.get() 方法发送一个 GET 请求到指定的 URL,并设置了请求头中的 User-Agent,以模拟浏览器发送请求。然后,我们将响应结果的编码设置为 GBK,通过 resp.encoding = 'gbk' 来告诉软件要用中文显示。最后,将获取到的网页内容打印出来。

url = 'http://www.netbian.com/mei/'
resp = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
resp.encoding = 'gbk'
print(resp.text)

3. 解析网页内容并提取图片地址和名称

在这里插入图片描述

使用 etree.HTML() 方法将网页内容转换成 XPath 可解析的对象。然后,使用 XPath 表达式提取所有图片的 URL 和名称,并将结果存储在 img_urlsimg_names 列表中。

xp = etree.HTML(resp.text)
img_urls = xp.xpath('//ul/li/a/img/@src')
img_names = xp.xpath('//ul/li/a/img/@alt')

4. 下载并保存图片

在这里插入图片描述

使用 zip() 函数将每个图片的 URL 和名称配对,并进行迭代。在迭代过程中,我们发送一个 GET 请求到图片的 URL,并将响应内容保存为图片文件。这里使用了 with open 语句来自动关闭文件。最后,我们将图片保存在 ./图片合成/img_f/ 目录下以图片名称命名。

for u, n in zip(img_urls, img_names):
    print(f'正在下载: 图片名:{n}')
    img_resp = requests.get(u, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
    with open(f'./图片合成/img_f/{n}.jpg', 'wb') as f:
        f.write(img_resp.content)

完整代码

# 地址
url = 'http://www.netbian.com/mei/'

import requests
from lxml import etree

# 发送请求获取网页内容
resp = requests.get(url,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
resp.encoding = 'gbk'  # 告诉软件,要用中文给我显示
print(resp.text)  # 打印文本结果

# 使用lxml解析HTML内容
xp = etree.HTML(resp.text)

# 提取图片URL和名称
img_urls = xp.xpath('//ul/li/a/img/@src')
img_names = xp.xpath('//ul/li/a/img/@alt')

# 遍历图片URL和名称,并下载保存到本地
for u, n in zip(img_urls, img_names):
    print(f'正在下载:图片名:{n}')
    img_resp = requests.get(u, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
    with open(f'./图片合成/img_f/{n}.jpg', 'wb') as f:
        f.write(img_resp.content)

关键代码讲解

 
# 地址
url = 'http://www.netbian.com/mei/'

这里定义了要爬取的网页地址。

import requests
from lxml import etree

导入所需的库:requests 用于发送网络请求,lxml 用于解析和提取数据。

resp = requests.get(url,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
resp.encoding = 'gbk' # 告诉软件,要用中文给我显示
print(resp.text) # 打印文本结果

通过发送 GET 请求获取指定网页的内容,并指定请求头中的 User-Agent 为浏览器的标识,以模拟浏览器访问。使用 resp.encoding 设置编码为 GBK,以便正确显示中文字符。最后打印响应结果的文本内容。

xp = etree.HTML(resp.text)

使用 lxml 库的 etree.HTML 方法将网页内容转换为可解析的对象。

img_urls = xp.xpath('//ul/li/a/img/@src')
img_names = xp.xpath('//ul/li/a/img/@alt')

使用 XPath 表达式提取图片的 URL 和名称。xpath 函数返回一个列表,其中的元素是按照表达式提取的结果。

for u,n in zip(img_urls,img_names):
    print(f'正在下载: 图片名:{n}')
    img_resp = requests.get(u,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'})
    with open(f'./图片合成/img_f/{n}.jpg','wb') as f:
        f.write(img_resp.content)

通过迭代 img_urlsimg_names 列表,使用 zip 函数将图片的 URL 和名称配对。在迭代的过程中,发送 GET 请求获取图片的响应内容。然后使用 with open 语句打开文件,并将图片内容写入文件中,保存到本地。这里使用了 wb 模式以二进制方式写入文件。

注意:在运行代码之前需要创建一个名为 图片合成/img_f 的文件夹,用于保存下载的图片。

关键点讲解说明:

  • 爬虫是一种自动化获取网页内容的技术,可以用于从指定网页上获取数据。
  • 通过发送 HTTP 请求,可以获取网页的 HTML 内容。
  • 使用 requests 库可以方便地发送请求并获取响应。
  • 使用 XPath 表达式可以方便地从 HTML 中提取所需的数据。
  • 在爬虫过程中,需要模拟浏览器访问,以防止被网站阻止或误判为恶意行为。
  • 下载文件时,可以使用 requests 库的 get 方法获取文件的内容,并使用 open 函数将内容写入文件。

结束语

本文介绍了如何使用 Python 编写一个简单的爬虫,从指定网页中获取女神图片,并保存到本地。通过学习本文,你可以了解基本的网络请求和数据提取技巧,为你未来的爬虫项目打下基础。当使用爬虫进行图片下载时,请确保遵守相关法律法规和网站的使用规定,尊重他人的版权和隐私。同时,注意合理使用爬虫,避免给目标网站和服务器造成过大负担。谨慎、高效地开展爬虫工作,更好地应用于实际开发中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

django学习笔记(1)

django创建项目 先创建一个文件夹用来放django的项目,我这里是My_Django_it 之后打开到该文件下,并用下面的指令来创建myDjango1项目 D:\>cd My_Django_itD:\My_Django_it>"D:\zzu_it\Django_learn\Scripts\django-admin.exe" startpr…

echarts遇到的问题

文章目录 折线图-区域面积图 areaStyley轴只有整数y轴不从0开始y轴数值不确定,有大有小,需要动态处理折线-显示label标线legend的格式化和默认选中状态x轴的lable超长处理x轴的相关设置 echarts各个场景遇到的问题 折线图-区域面积图 areaStyle areaStyl…

分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(二)

说明:如果实现了docker部署mysql并完成主从复制的话再继续,本篇文章主要说明springboot配置实现Shardingjdbc进行读写分离操作。 如果没实现docker部署mysql实现主从架构的话点击我 Shardingjdbc配置介绍(版本:5.3.2)…

STM32 Flash学习(一)

STM32 FLASH简介 不同型号的STM32,其Flash容量也不同。 MiniSTM32开发板选择的STM32F103RCT6的FLASH容量为256K字节,属于大容量产品。 STM32的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等3部分组成。 主存储器,该部分…

linux 指令 第3期

cat cat 指令: 首先我们知道一个文件内容属性 我们对文件操作就有两个方面:对文件内容和属性的操作 扩展:echo 指令 直接打印echo后面跟的字符串 看: 这其实是把它打印到了显示器上,我们也可以改变一下它的打印位置…

工业边缘计算为什么?

在工厂环境中使用边缘计算并不新鲜。可编程逻辑控制器(PLC)、微控制器、服务器和PC进行本地数据处理,甚至是微型数据中心都是边缘技术,已经在工厂系统中存在了几十年。在车间里看到的看板系统,打卡系统,历史…

加解密相关工具网站总结

加解密相关工具&网站总结 文章目录 加解密相关工具&网站总结CMD5,解密,反向查询JSFuck(JavaScriptAAEncode加密/解密(Javascript在线CTF编码工具开源加解密工具大佬文章:1.30余种加密编码类型的密文特征分析2.…

手把手一起上传本地项目至Gitee仓库

1、Gitee新建仓库 创建自己的Gitee账号,新建仓库,如图所示: 根据自己的项目情况,填写仓库信息,如图所示: 仓库创建完成,如图所示: 2、下载Git 下载地址可用链接: https://registry…

陕西师范大学大学:融合传统与创新的学府之旅

前言 > 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 > 📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看 > &#x1f4d…

Knowledge-QA-LLM: 基于本地知识库+LLM的开源问答系统

⚠️注意:后续更新,请移步README Knowledge QA LLM 基于本地知识库LLM的问答系统。该项目的思路是由langchain-ChatGLM启发而来。缘由: 之前使用过这个项目,感觉不是太灵活,部署不太友好。借鉴如何用大语言模型构建一…

2023年深圳杯数学建模D题基于机理的致伤工具推断

2023年深圳杯数学建模 D题 基于机理的致伤工具推断 原题再现: 致伤工具的推断一直是法医工作中的热点和难点。由于作用位置、作用方式的不同,相同的致伤工具在人体组织上会形成不同的损伤形态,不同的致伤工具也可能形成相同的损伤形态。致伤…

elementui el-table 封装表格

ps: 1.3版本 案例&#xff1a; 完整代码&#xff1a; 可直接复制粘贴&#xff0c;但一定要全看完&#xff01; v-slot"scopeRows" 是vue3的写法&#xff1b; vue2是 slot-scope"scope" <template><!-- 简单表格、多层表头、页码、没有合并列行…

iOS 应用上架的步骤和工具简介

编辑 APP开发助手是一款能够辅助iOS APP上架到App Store的工具&#xff0c;它解决了iOS APP上架流程繁琐且耗时的问题&#xff0c;帮助跨平台APP开发者顺利将应用上架到苹果应用商店。最重要的是&#xff0c;即使没有配置Mac苹果机&#xff0c;也可以使用该工具完成一系列操作&…

Merge the squares! 2023牛客暑期多校训练营4-H

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有n*n个边长为1的小正方形摆放在边长为n的大正方形中&#xff0c;每次可以选择不超过50个正方形&#xff0c;将其合并为一个更大的正方形&#xff0c;求一种可行的操作使所有小正方形都被合并成一个n*n的大正方形 1…

找不到mfc140u.dll怎么解决

第一&#xff1a;mfc140u.dll有什么用途&#xff1f; mfc140u.dll是Windows操作系统中的一个动态链接库文件&#xff0c;它是Microsoft Foundation Class (MFC)库的一部分。MFC是 C中的一个框架&#xff0c;用于构建Windows应用程序的用户界面和功能。mfc140u.dll包含了MFC库中…

“RWEQ+”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践

土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2&#xff0c;占国土总面积的16.7%&#xff0c;严重影响这些地区的资源开发和社会经…

GitLab开启双端认证并登录GitLab

GitLab开启双端认证并登录GitLab 1.介绍双端认证 单重认证——密码验证&#xff0c;这极其容易出现密码被盗&#xff0c;密码泄露等危险事件。 于是为了提高安全性&#xff0c;就出现了双因素认证&#xff0c;多因素认证。登录的时候不仅要输入账号和密码还需要输入一个验证码…

Web3 叙述交易所授权置换概念 编写transferFrom与approve函数

前文 Web3带着大家根据ERC-20文档编写自己的第一个代币solidity智能合约 中 我们通过ERC-20一种开发者设计的不成文规定 也将我们的代币开发的很像个样子了 我们打开 ERC-20文档 我们transfer后面的函数就是transferFrom 这个也是 一个账号 from 发送给另一个账号 to 数量 val…

如何搭建并部署抖音SEO源代码?

搭建并部署抖音SEO源代码&#xff0c;需要以下步骤&#xff1a; 购买服务器&#xff1a;在云服务商或者VPS提供商购买一台服务器&#xff0c;选择Linux系统。 安装LAMP/LEMP环境&#xff1a;LAMP是指Linux Apache MySQL PHP&#xff0c;LEMP是指Linux Nginx MySQL PHP。…

Spring学习笔记,包含Spring IOC、AOP基本原理、Bean管理、Spring 事务等等

&#x1f600;&#x1f600;&#x1f600;创作不易&#xff0c;各位看官点赞收藏. 文章目录 Spring 基础笔记1、控制反转 (IOC)1.1、IOC 底层原理1.2、IOC 之Bean管理 ( XML )1.3、IOC 之Bean管理 (FactoryBean)1.4、Bean的作用域1.5、Bean的生命周期1.6、Bean的自动装配1.7、I…