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

使用BeautifulSoup爬取ul嵌套li数据仅获表头报AttributeError如何解决

问题解决

错误原因

AttributeError: ResultSet object has no attribute 'find' 报错的核心原因是你对find_all()返回的元素列表(ResultSet类型)直接调用了find()方法,只有单个元素节点才能调用find()方法。

除此之外原有代码还存在3个逻辑问题:

  • 只定位到了外层section节点,没有进入到section下嵌套的ul、li数据行层级,所以只能拿到表头内容
  • 提取的是标签对象而非标签内的文本内容
  • 数据存储逻辑写在循环外,只能拿到最后一次遍历的结果

修复后的代码

import requests
from bs4 import BeautifulSoup
import time

# 存储所有爬取结果
all_info = []
# 爬取1-64页内容
for page_num in range(1, 65):
    url = f"https://www.expansion.com/empresas-de/ganaderia/granjas-en-general/{page_num}.html"
    # 加请求头避免被反爬
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }
    response = requests.get(url, headers=headers)
    response.encoding = response.apparent_encoding
    soup = BeautifulSoup(response.text, "html.parser")
    
    # 先定位到企业列表的ul节点
    ul_node = soup.find("section", class_="directorio_empresas").find("ul")
    # 拿到ul下所有li行,跳过第一个表头行
    row_list = ul_node.find_all("li")[1:]
    
    # 遍历每一行数据
    for row in row_list:
        title = row.find('div', class_="col1").get_text(strip=True)
        location = row.find('div', class_="col2").get_text(strip=True)
        province = row.find('div', class_="col3").get_text(strip=True)
        all_info.append([title, location, province])
    
    # 每页间隔1秒避免请求过快被封
    time.sleep(1)

# 打印结果验证
for item in all_info:
    print(item)

注意事项

  • 代码里加了UA请求头和请求间隔,避免触发网站反爬规则
  • 实际数据存储在li下的div节点内,class名和原有写法一致,直接提取文本即可
  • 爬取过程中如果出现请求失败,可以适当调整sleep的间隔时间

内容的提问来源于stack exchange,提问作者Nick Gordon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:36:05