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

部分ul无li子元素时从ul数组中爬取li元素的Python爬虫问题求解

问题修复方案

第一套方案异常触发的根因与修复

你第二块try代码块报错的核心原因是没有对<ul>下是否存在<li>做前置判空,大概率是你直接对空的li查询结果执行了取值操作,同时异常捕获范围过大掩盖了具体错误。
修正逻辑如下:

  • 遍历每个<ul>时,先调用find_all('li')获取子元素,结果为空直接跳过当前ul
  • 缩小异常捕获范围,仅捕获解析过程中可能出现的格式异常
    修正代码参考:
from bs4 import BeautifulSoup

# 替换为你的实际HTML内容
html = """你附上的HTML样例内容"""
soup = BeautifulSoup(html, "html.parser")
result = []

for ul in soup.find_all("ul"):
    li_list = ul.find_all("li")
    # 无li子元素直接跳过
    if not li_list:
        continue
    for li in li_list:
        text = li.get_text(strip=True)
        if text:
            result.append(text)

# 逐行输出
for item in result:
    print(item)

第二套方案无法换行的修复

你第二套方案没有单独换行的核心原因是把所有<li>的文本做了合并输出,没有拆分单个<li>的结果。你可以直接用select选择器全局匹配所有<ul>下的<li>,自动跳过无li的ul,同时逐行输出:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")
# 直接选择所有ul的直接子li元素,自动过滤没有li的ul
for li in soup.select("ul > li"):
    print(li.get_text(strip=True))

如果你需要把结果存入变量后再统一输出,用'\n'.join()拼接列表即可:

result = [li.get_text(strip=True) for li in soup.select("ul > li") if li.get_text(strip=True)]
print('\n'.join(result))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:54:01