首页 > 编程语言 >【小白必看】Python爬虫实战之批量下载女神图片并保存到本地

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

时间:2023-10-18 16:06:09浏览次数:40  
标签:img Python resp 爬虫 537.36 小白必 requests xp 图片

在这里插入图片描述

前言

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

标签:img,Python,resp,爬虫,537.36,小白必,requests,xp,图片
From: https://blog.51cto.com/u_14522592/7918885

相关文章

  • 【小白必看】Python图片合成示例之使用PIL库实现多张图片按行列合成
    前言本文介绍了一个用于图片合成的Python代码示例。该代码使用了PIL库来处理图片文件,并通过嵌套循环将多张图片按照指定的行数和列数进行合成。最终生成的合成图片保存在本地。效果图1.导入必要的库fromPILimportImageimportos这段代码导入了PIL库中的Image模块,......
  • 【玩转python系列】【小白必看】使用Python爬虫技术获取代理IP并保存到文件中
    前言这篇文章介绍了如何使用Python爬虫技术获取代理IP并保存到文件中。通过使用第三方库requests发送HTTP请求,并使用lxml库解析HTML,我们可以从多个网页上获取IP、Port和地址信息。本文将逐步解析代码的每一部分,帮助读者更好地理解爬虫的工作原理。导入依赖库importrequ......
  • 【玩转Python系列】【小白必看】使用Python爬取双色球历史数据并可视化分析
    前言本文介绍了如何使用Python编程语言获取双色球历史数据,并使用数据可视化工具Matplotlib绘制了红球数量的折线图。通过对双色球历史数据的分析,我们可以更好地了解双色球的开奖规律和趋势。导入库importrequestsfromlxmlimportetreeimportcsvimportmatplotlib.pypl......
  • 【玩转Python系列【小白必看】Python多线程爬虫:下载表情包网站的图片
    前言本文主要介绍了使用Python编写的多线程爬虫程序,用于下载表情包网站上的图片。通过解析网页内容和使用XPath定位,可以获取到图片的URL,并将其保存到本地。1.导入模块和库importrequestsfromlxmlimportetreefromthreadingimportThreadfromqueueimportQueueim......
  • 【python】Python tkinter库实现重量单位转换器的GUI程序
    前言这段代码是一个简单的重量单位转换器的GUI程序,使用了Python的tkinter库来创建图形界面。该程序可以将输入的重量从千克转换为克、磅和盎司,并通过三个文本框分别显示转换后的结果。学到什么?使用tkinter库创建一个GUI窗口。tkinter是Python标准库中的一个模块,用于......
  • 【Python】Python 实现猜单词游戏——挑战你的智力和运气!
    前言大家好!欢迎来到我们精心准备的文字游戏世界。今天,我将向大家介绍一款有趣而又考验智力的游戏——猜单词游戏。在游戏中,你将面临一个神秘的单词,你需要凭借自己的智慧和运气来猜测这个单词是什么。每猜错一次,你将失去一条生命线,当生命线用尽时,你将面临失败。但只要你成功猜对了......
  • ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?
    CentOS7pyenv安装Python3.10.13报错yuminstall-yopenssl-developenssl11-developenssl11-libCPPFLAGS="-I/usr/include/openssl11"LDFLAGS="-L/usr/lib64/openssl11-lssl-lcrypto"pyenvinstall-v3.10.13[root@Chatglm2-6B~]#pyenvversi......
  • Python Traceback:异常信息定位
    一、traceback模块简介traceback模块是Python标准库中的一个模块,提供了一些函数和类,用于获取和处理异常的跟踪信息。它可以帮助我们定位异常信息所在的代码位置,从而更好地调试和修复程序。 二、获取异常跟踪信息1.traceback.format_exc()函数在异常处理中,我们经常需要获取......
  • [914] In Python's datetime library, you can format dates using the strftime() me
    InPython'sdatetimelibrary,youcanformatdatesusingthestrftime()method.Thismethodallowsyoutocreateaformattedstringrepresentationofadatetimeobject,specifyingtheformatyouwant.Here'showyoucanformatadateusingstrft......
  • dhcpd.leases的Python解析程序
    #!/usr/local/bin/python3importdatetime,bisectdefparse_timestamp(raw_str):tokens=raw_str.split()iflen(tokens)==1:iftokens[0].lower()=='never':return'never';......