Python嵌套循环网页爬取报错:列表对象无find_all属性
解决AttributeError: 'list' object has no attribute 'find_all'问题
嘿,我来帮你搞定这个报错!咱们先把问题掰扯清楚:
你代码里的result是个Python列表——因为soup.find_all()返回的本身就是包含多个Tag对象的列表,你把这些Tag逐个append到result里,它自然还是个列表。而find_all()是BeautifulSoup的Tag对象或BeautifulSoup实例才有的方法,列表根本没这个属性,所以才会抛出这个错误。
修正后的代码示例
方式一:嵌套循环(直观易懂)
直接遍历每个bodyText类的div标签,在每个div内部查找p标签:
website_details = soup.find_all("div", attrs={'class': 'bodyText'}) result2 = [] # 遍历每个符合条件的div标签 for div_tag in website_details: # 在当前div下查找所有p标签 p_tags = div_tag.find_all("p") for p_tag in p_tags: result2.append(p_tag)
方式二:列表推导式(简洁高效)
如果想让代码更紧凑,用Python的列表推导式一步就能完成:
website_details = soup.find_all("div", attrs={'class': 'bodyText'}) result2 = [p_tag for div_tag in website_details for p_tag in div_tag.find_all("p")]
这样就能正确获取所有bodyText类div下的p标签,不会再出现那个报错啦!
内容的提问来源于stack exchange,提问作者Luke Simpson
相关产品推荐
相关产品推荐

