基础WebScraping问题:爬取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("未找到任何标题元素,请检查页面结构")
额外调试建议
- 可以先打印
res.text内容,确认请求返回的原始HTML结构,避免被浏览器开发者工具中JS渲染后的结构误导。 - 对于动态生成的class,尽量使用语义化固定前缀或元素层级关系定位,不要依赖完整的随机class字符串。
内容的提问来源于stack exchange,提问作者SH Kim
相关产品推荐
相关产品推荐

