使用Python BeautifulSoup爬取漫画网站图片URL时出现错误
问题排查与修复方案
你的代码报错是因为div_tag为None时调用了find_all()方法,触发AttributeError。以下是具体原因和修复步骤:
核心原因
- 反爬拦截:网站检测到请求来自脚本而非浏览器,返回的页面不含目标
div#page{i}元素,导致soup.find()返回None。 - 页面结构不符:实际页面的图片容器id可能不是
page{i},或者图片标签的位置和你预期的不同。 - 无效页面请求:
range(1,54)覆盖的页数可能超出实际存在的章节页数,请求不存在的页面时返回的内容没有目标元素。
修复后的代码
import requests from bs4 import BeautifulSoup url = "https://mangakatana.com/manga/damn-reincarnation.26360/c6" img_urls = [] # 模拟浏览器请求头,避免被反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } # 先缩小范围测试,后续可根据实际页数调整 for i in range(1, 11): try: response = requests.get(f'{url}/{i}', headers=headers) # 检查请求是否成功 response.raise_for_status() soup = BeautifulSoup(response.content, "html.parser") div_tag = soup.find("div", {"id": f"page{i}"}) if not div_tag: print(f"第{i}页未找到目标div,跳过") continue img_tags = div_tag.find_all("img") # 提取src,同时处理可能无src属性的情况 for img in img_tags: src = img.get("src") if src: img_urls.append(src) print(f"找到图片链接:{src}") except Exception as e: print(f"请求第{i}页出错:{str(e)}") print("\n所有图片链接:") print(img_urls)
额外建议
- 确认实际页数:手动打开章节页面,查看实际页数后调整
range范围,避免请求无效页面。 - 核对页面结构:在浏览器中右键检查目标页面元素,确认图片容器的id、标签层级是否和代码中的预期一致。
- 动态加载处理:如果发现图片是通过JavaScript动态渲染的,
requests无法获取到内容,可改用selenium或playwright工具模拟浏览器加载页面。
内容的提问来源于stack exchange,提问作者Zaka Asta
相关产品推荐
相关产品推荐

