Python爬取子页面的图片数据保存到本地

主要内容

上次做了一个基于requestsbs4爬取图片保存到本地的实例,今天在上次的基础上再做一个简单的联系,通过当前页面爬取子页面的图片数据保存到本地,具体流程如下:

内容分析

1.情况说明

今天准备爬取的页面是天堂图片网的自然风光图片,这些数据通过解析页面获取,因为没有抓到包,噢咦!

在这里插入图片描述

在这里插入图片描述

在图片的目录中可以看到有很多主题的图片,每个主题又要不少的数量的图片,并且自然风光的图片种类也有很多页,那么怎么来拿到这些图片呢?我们继续往下分析。。。

2.分析主题类型图

打开浏览器的检查功能,查看主题图片的网页结构,可以分析每个类型都有一个a标签,其中的href链接就对应主题的图片集合的页面地址,这个图片集合地址里的图片才是我们的目标。

在这里插入图片描述
在这里插入图片描述
那我们的方法应该就是拿到主题对应的a标签的链接地址,然后获取链接对应的页面,在获取页面里的图片src地址,通过解析地址去将图片保存到本地文件夹。

3.主题的分页

点击分页可以跳转到新的页面,观察地址栏多了个index_x.html,可以大概知道了其规律了吧,除了第一页,后面的页都是有页面后缀的页面。
在这里插入图片描述
在这里插入图片描述
我在地址栏随意输入了个100页,没想到是最后一页。。。。

在这里插入图片描述

那我们就写个循环来获取每个分页不就好咯。。

具体代码

import requests
from bs4 import BeautifulSoup
import random
import re

if __name__ == '__main__':
    base_url = 'https://www.ivsky.com/tupian/ziranfengguang/'

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36"
    }

    # 爬取第1页到第2页(建议练习就不用爬太多,100页的图片量太大)
    for i in range(1, 3):
        if i != 1:
            base_url = 'https://www.ivsky.com/tupian/ziranfengguang/index_' + str(i) + '.html'  # 分页页面的地址
        r = requests.get(url=base_url, timeout=random.randint(15, 30), headers=headers)
        soup = BeautifulSoup(r.content, "html.parser", from_encoding='utf-8')  # 解析主题页面
        page_a = soup.select(".il_img a")  # 获取主题对应页面的链接地址
        for item in page_a:
            url_ = "https://www.ivsky.com" + item['href']  # 每一种主题的图片的具体页面地址(前面将其拼接完整)
            # 获取类型集合的页面
            r_p = requests.get(url=url_, timeout=random.randint(10, 35), headers=headers)
            soup_p = BeautifulSoup(r_p.content, "html.parser", from_encoding='utf-8')  # 解析主题的图片的具体页面
            imgs = soup_p.select(".il_img img")  # 获取所有图片标签
            for img in imgs:
                src = "http:" + img['src']  # 图片地址
                type_name = img['alt']  # 图片主题(alt属性)
                file_name = re.findall(r".*/(.*).j", src)[0]  # 通过正则提取图片的名称
                img_file = requests.get(src).content  # 解析图片
                with open("images/" + type_name + file_name + ".jpg", "wb") as pf:
                    pf.write(img_file)  # 保存图片、图片命名用主题+图片名称
                print(type_name + file_name + ".jpg--保存成功!")

爬取结果

在这里插入图片描述
在这里插入图片描述
里面有重名的文件覆盖,所有最后结果比实际数据量少了一点点,各位也可以自己想想办法。另外,现在爬取的图片比较小,分辨率低,感兴趣的小伙伴可以试试爬取高清的图片(图片可以继续点击跳转到高清页面),可以做壁纸的那种呢。。

总结

以上实例主要是说明了分页的爬取数据和子页面数据的爬取,感兴趣的小伙伴可以试试。在爬取信息的时候要尊重版权,最好控制爬取的速度与数量,以防给目标网站的服务器造成压力,自己ip也会被封的。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值