BeautifulSoup提取ul下li内链接报ResultSet无find属性错误
错误原因
findChildren() 方法的返回值是 ResultSet 类型,本质是存储匹配到的所有标签的列表,不是单个标签对象,因此不能直接在这个返回值上调用仅单个标签支持的 find() 方法。
代码里 chapters.findChildren("ul" , recursive=False) 会返回目标div下所有直接子级ul标签组成的列表——哪怕实际DOM里只有1个ul,返回值依然是列表结构,直接调用.find('li')就会触发属性错误。
除此之外遍历逻辑还有一处问题:就算拿到了单个ul标签,直接调用.find('li')只会返回第一个匹配的li标签,不会返回所有li,也无法完成遍历需求。
修复后可运行代码
from bs4 import BeautifulSoup import requests html_page = requests.get('https://example.com/manga/name/') soup = BeautifulSoup(html_page.content, 'html.parser') # 定位章节列表容器div chapter_container = soup.find('div', {"id": "chapter-list"}) # 获取容器下的单个ul标签 ul_tag = chapter_container.find("ul", recursive=False) # 遍历ul下所有li标签,提取链接 for litag in ul_tag.find_all('li'): print(litag.find("a")["href"])
运行后输出结果:
https://example.com/manga/name/2 https://example.com/manga/name/1
避坑提示
- BeautifulSoup里所有返回多结果的方法(包括
findChildren、find_all、返回多结果的select),返回值都是ResultSet列表结构,必须遍历列表拿到单个标签后,才能调用find、find_all这类标签方法,不能直接在列表上调用。 - 如果需要获取所有匹配的标签,必须用
find_all();find()只会返回第一个匹配的单个标签,无法用于遍历全量目标元素。
内容的提问来源于stack exchange,提问作者Boundless
相关产品推荐
相关产品推荐

