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


在这里插入图片描述

前言

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

猜你喜欢

转载自blog.csdn.net/qq_33681891/article/details/131999555
今日推荐