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

基础WebScraping问题:爬取Naver Webtoon时出现索引越界错误

问题解决:Naver Webtoon爬虫无法提取剧集标题

问题根源

你遇到的IndexError本质是页面CSS类名已更新——教程中使用的EpisodeListList__title_area--fTivg这类带随机后缀的class是动态生成的,Naver前端更新后,后缀部分会变化,导致find_all无法匹配到任何元素,进而触发列表索引越界错误。

解决方案

使用部分匹配class的方式定位元素(只匹配固定前缀,忽略动态变化的后缀),或者基于页面结构层级选择元素,以下是修正后的代码:

方案1:通过层级+部分匹配class定位

import requests
from bs4 import BeautifulSoup

url = "https://comic.naver.com/webtoon/list?titleId=811721&tab=wed"
res = requests.get(url)
res.raise_for_status()  

soup = BeautifulSoup(res.text, "lxml")
# 匹配class包含"EpisodeListList__title_area"的p标签(忽略动态后缀)
cartoons = soup.find_all("p", class_=lambda x: x and "EpisodeListList__title_area" in x)

if cartoons:
    # 匹配内部class包含"EpisodeListList__title"的span标签
    title_span = cartoons[0].find("span", class_=lambda x: x and "EpisodeListList__title" in x)
    if title_span:
        print(title_span.get_text(strip=True))
    else:
        print("未找到标题span元素")
else:
    print("未找到匹配的剧集区域元素")

方案2:直接定位标题元素

如果只需要提取标题,可以跳过外层标签,直接匹配标题span的固定前缀:

import requests
from bs4 import BeautifulSoup

url = "https://comic.naver.com/webtoon/list?titleId=811721&tab=wed"
res = requests.get(url)
res.raise_for_status()  

soup = BeautifulSoup(res.text, "lxml")
# 直接匹配class包含"EpisodeListList__title"的span标签
title_elements = soup.find_all("span", class_=lambda x: x and "EpisodeListList__title" in x)

if title_elements:
    print(title_elements[0].get_text(strip=True))
else:
    print("未找到任何标题元素,请检查页面结构")

额外调试建议

  1. 可以先打印res.text内容,确认请求返回的原始HTML结构,避免被浏览器开发者工具中JS渲染后的结构误导。
  2. 对于动态生成的class,尽量使用语义化固定前缀或元素层级关系定位,不要依赖完整的随机class字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:55:29