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

Python使用BeautifulSoup爬取ul下li仅返回第一条数据的问题求解

问题原因
  • 反爬机制限制:目标网站对未携带User-Agent标识的请求会返回不完整的页面内容,多数情况下你拿到的HTML中sub-terms类的ul下只有1个li节点,因此循环仅执行一次就结束,你贴出的3条输出属于偶然请求到完整页面的不稳定结果。
  • 代码容错性不足:如果单个single-sub-term类li节点下不存在你查找的<h3>标签或first-line类的span标签,find()方法会返回None,调用.text属性会直接抛出AttributeError导致程序中断,无法遍历后续节点。
  • 变量命名不规范:你使用了Python内置关键字list作为循环变量名,会覆盖内置的列表类定义,存在潜在逻辑风险。
修复方案

调整代码逻辑,增加请求头伪装,添加元素存在性判断,修改不规范变量名即可稳定获取全部3条数据,参考代码如下:

from bs4 import BeautifulSoup
import requests

# 添加请求头伪装成浏览器请求
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
html_text = requests.get('https://www.geva.co.il/solution_term/english_2021_summer/', headers=headers).text
soup = BeautifulSoup(html_text, 'lxml')

entire_page = soup.find('ul', class_ = 'sub-terms')
term_lists = entire_page.find_all('li', class_ ='single-sub-term')
for term_item in term_lists:
    # 增加元素存在性判断,避免报错中断
    date_tag = term_item.find('h3')
    pdf_tag = term_item.find('span', class_='first-line')
    date = date_tag.text.strip() if date_tag else "无日期信息"
    pdf_info = pdf_tag.text.strip() if pdf_tag else "无编号信息"

    print(f'''Welcome! 
    Current date - {date}        Term Number : {pdf_info} ''')
    print('')

调整后可以稳定输出全部3条考试信息,不会出现中途中断或者数据缺失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:18:03