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

Python漫画解析返回空文件:指定漫画章节图片解析求助

排查漫画章节图片爬取空文件问题

我来帮你排查下问题,你的代码返回空文件大概率是这几个核心原因导致的,咱们一步步来解决:


主要问题分析

  1. 未检查请求响应状态:发送请求后没验证是否成功,如果网站返回403(反爬拦截)、404(链接失效)等错误,后续解析的是空页面,自然爬不到图片。
  2. 缺失请求头被反爬拦截:默认的requests请求头会被漫画网站识别为爬虫,返回的内容是空的或者假页面。
  3. 目录创建未处理已存在情况:如果之前运行过代码创建过目录,再次执行会抛出FileExistsError直接终止程序。
  4. 硬编码URL切片不健壮:你用url[34:]截取漫画名和章节,一旦网站URL结构变化,这个切片就会出错。
  5. 图片元素定位逻辑缺失:你的代码只写到初始化BeautifulSoup,后续没有定位图片标签的逻辑,自然不会下载任何内容。

修正后的完整代码

import requests
import bs4
import os

def download_manga_chapter(url):
    # 设置模拟浏览器的请求头,避免被反爬
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }
    
    try:
        # 发送请求并检查响应状态
        res = requests.get(url, headers=headers)
        res.raise_for_status()  # 如果请求失败直接抛出异常
        print(f"[+] 成功请求页面: {url}")

        # 更健壮地提取漫画名和章节(从URL路径拆分)
        path_parts = url.split("/")[-2:]
        name = "_".join(path_parts)
        
        # 创建目录,已存在则跳过
        os.makedirs(name, exist_ok=True)
        print(f"[+] 已创建/使用目录: {name}")
        os.chdir(name)

        # 解析页面
        soup = bs4.BeautifulSoup(res.text, "html.parser")
        # 定位漫画图片容器(manganelo的图片通常在这个class的容器里)
        img_container = soup.find("div", class_="container-chapter-reader")
        if not img_container:
            print("[-] 未找到图片容器,可能网站结构已变化")
            return
        
        # 获取所有图片标签
        img_tags = img_container.find_all("img")
        if not img_tags:
            print("[-] 未找到任何图片")
            return
        
        # 下载每张图片
        for idx, img_tag in enumerate(img_tags, 1):
            img_url = img_tag.get("src")
            if not img_url:
                print(f"[-] 第{idx}张图片URL为空,跳过")
                continue
            
            try:
                # 发送图片请求
                img_res = requests.get(img_url, headers=headers)
                img_res.raise_for_status()
                # 保存图片,用序号命名
                with open(f"{idx}.jpg", "wb") as f:
                    f.write(img_res.content)
                print(f"[+] 已下载第{idx}张图片")
            except Exception as e:
                print(f"[-] 下载第{idx}张图片失败: {str(e)}")
        
        print("[+] 章节图片下载完成!")

    except Exception as e:
        print(f"[-] 程序出错: {str(e)}")

# 调用函数
if __name__ == "__main__":
    manga_url = "http://manganelo.com/chapter/read_one_punch_man_manga_online_free3/chapter_136"
    download_manga_chapter(manga_url)

关键改进说明

  • 请求头设置:添加了User-Agent模拟浏览器访问,避免被网站反爬拦截。
  • 响应状态检查:用res.raise_for_status()确保请求成功后再继续执行。
  • 健壮的目录命名:通过拆分URL路径生成目录名,不再依赖硬编码的切片位置。
  • 目录创建容错:用os.makedirs(..., exist_ok=True)避免已存在目录的报错。
  • 正确的图片定位:针对manganelo的页面结构,定位到图片容器后提取所有图片标签。
  • 异常处理:增加了各个环节的异常捕获,方便排查具体错误点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:33:58