You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对含两层下一页分页结构的图片网站实现scrape图片采集?

两层分页爬取实现思路及参考代码

核心实现思路

  • 外层列表页循环:每次请求当前列表页,先提取页面中所有专辑的访问链接,再查找是否存在class="next page-numbers"的下一页按钮标签。如果存在则拼接为完整URL作为下一次请求的列表页地址,重复上述流程;如果找不到下一页标签,说明列表页已全部遍历完成,终止外层循环。
  • 内层专辑页循环:拿到单个专辑的首页地址后,请求当前专辑页,提取该页所有图片地址进行保存,再查找页面中是否存在文本为「下一页」的span标签对应的父级a标签。如果存在则拼接为完整URL作为下一次请求的专辑页地址,重复提取图片+判断下一页的流程;如果找不到下一页标签,说明当前专辑已全部遍历完成,终止内层循环。
  • 基础适配说明:请求时需要添加User-Agent请求头模拟浏览器访问,避免被站点拦截;两次请求之间添加适当的延时,降低站点服务器压力,同时也避免触发反爬限制。

参考代码示例(Python)

以下代码基于requests+BeautifulSoup实现核心逻辑,你可根据页面实际结构调整选择器、补充图片下载逻辑即可使用:

import requests
from bs4 import BeautifulSoup
import time

# 基础配置
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
base_domain = "http://img.imyimy.com"

def crawl_single_album(album_first_url):
    """单个专辑的爬取逻辑(内层分页循环)"""
    current_album_url = album_first_url
    while True:
        resp = requests.get(current_album_url, headers=headers)
        resp.encoding = "utf-8"
        soup = BeautifulSoup(resp.text, "html.parser")

        # ========== 待补充:调整选择器提取当前页所有图片地址 ==========
        img_tags = soup.select("article img")  # 示例选择器,需按实际页面修改
        for img in img_tags:
            img_full_url = base_domain + img["src"] if img["src"].startswith("/") else img["src"]
            # 此处添加图片下载逻辑即可
            print(f"待下载图片:{img_full_url}")

        # 判断专辑是否有下一页
        next_span = soup.find("span", string="下一页")
        if not next_span or not next_span.find_parent("a"):
            break
        next_album_relative = next_span.find_parent("a")["href"]
        current_album_url = base_domain + next_album_relative
        time.sleep(0.5)

if __name__ == "__main__":
    # 外层列表页分页循环
    current_list_url = "http://img.imyimy.com/mengmeizi/"
    while True:
        resp = requests.get(current_list_url, headers=headers)
        resp.encoding = "utf-8"
        soup = BeautifulSoup(resp.text, "html.parser")

        # ========== 待补充:调整选择器提取当前页所有专辑链接 ==========
        album_tags = soup.select("h2.title a")  # 示例选择器,需按实际页面修改
        for tag in album_tags:
            album_relative = tag["href"]
            album_full_url = base_domain + album_relative
            crawl_single_album(album_full_url)
            time.sleep(1)

        # 判断列表页是否有下一页
        next_list_tag = soup.select_one("a.next.page-numbers")
        if not next_list_tag:
            break
        next_list_relative = next_list_tag["href"]
        current_list_url = base_domain + next_list_relative
        time.sleep(1)

内容的提问来源于stack exchange,提问作者Peters7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:30:05