Python漫画解析返回空文件:指定漫画章节图片解析求助
排查漫画章节图片爬取空文件问题
我来帮你排查下问题,你的代码返回空文件大概率是这几个核心原因导致的,咱们一步步来解决:
主要问题分析
- 未检查请求响应状态:发送请求后没验证是否成功,如果网站返回403(反爬拦截)、404(链接失效)等错误,后续解析的是空页面,自然爬不到图片。
- 缺失请求头被反爬拦截:默认的
requests请求头会被漫画网站识别为爬虫,返回的内容是空的或者假页面。 - 目录创建未处理已存在情况:如果之前运行过代码创建过目录,再次执行会抛出
FileExistsError直接终止程序。 - 硬编码URL切片不健壮:你用
url[34:]截取漫画名和章节,一旦网站URL结构变化,这个切片就会出错。 - 图片元素定位逻辑缺失:你的代码只写到初始化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
相关产品推荐
相关产品推荐

