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

Python爬虫循环异常:仅返回1个随机结果,预期7个结果求助

问题排查与修复方案

我帮你找到了问题所在——你的代码之所以只返回1个随机结果,核心原因是页面上不是所有<li>标签都包含<a>子元素,导致循环到无链接的列表项时直接抛出异常,程序中断了。

具体原因

你用page_soup.findAll("li")抓取了页面上所有列表项,但目标网站的HTML里,部分<li>并没有嵌套<a>标签。当代码尝试访问这类li的container.a.text时,container.a会返回None,接着调用.text就会触发AttributeError,程序直接停掉。你看到的“1个随机结果”其实是程序崩溃前输出的最后一条有效内容,每次运行可能因为遇到无链接li的位置不同,结果看起来像随机的。

两种修复方式

方式一:循环时先检查是否存在链接标签

在获取文本前先判断当前li有没有<a>元素,避开无链接的项:

import requests
import bs4
my_url = 'http://www.promittere.se/'
res = requests.get(my_url)
page_soup = bs4.BeautifulSoup(res.text, 'html.parser')
containers = page_soup.findAll("li")
for container in containers:
    # 先确认<a>标签存在再处理
    if container.a:
        title = container.a.text.strip()  # 清理文本前后的空白
        print("title: " + title)

方式二:直接定位li下的a标签(更简洁高效)

用CSS选择器直接筛选出所有嵌套在<li>里的<a>标签,从根源上跳过无链接的列表项:

import requests
import bs4
my_url = 'http://www.promittere.se/'
res = requests.get(my_url)
page_soup = bs4.BeautifulSoup(res.text, 'html.parser')
# 直接选中所有<li>下的<a>元素
link_tags = page_soup.select("li a")
for link in link_tags:
    title = link.text.strip()
    print("title: " + title)

这两种方法都能让你拿到所有预期的7个结果,不会再因为异常中断程序了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:08:57