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

使用BeautifulSoup通过类属性统计列表元素遇空数组问题求助

问题:使用BeautifulSoup统计列表元素返回空数组的解决方法

问题背景

尝试用BeautifulSoup统计列表元素数量时返回空数组,确认之前代码可正常运行,当前HTML结构如下:

<div class="row">
...
<div class="style_details">
<ul data-id="list" class="listing_details">
<li data-id="listing-index-1"></li>
<li data-id="listing-index-2"></li>
<li data-id="listing-index-3"></li>
</ul>
</div>

使用的代码片段:

browser.get(url)
c = browser.page_source
soup = BeautifulSoup(c, "html.parser")
dom = etree.HTML(str(soup))  
data = soup.findAll('li',attrs={'class':'listing_details'})
links = len(data)

return links

问题原因

和嵌套无关,是选择器目标错误:你在代码里查找class为listing_details的<li>标签,但实际HTML中listing_details是<ul>的class属性,<li>并没有这个class,所以返回空数组。如果之前代码能运行,大概率是页面HTML结构发生了变化。

解决方法

方法1:先定位目标<ul>再统计子元素<li>数量

browser.get(url)
c = browser.page_source
soup = BeautifulSoup(c, "html.parser")
# 定位class为listing_details的ul
target_ul = soup.find('ul', class_='listing_details')
# 统计该ul下的li数量,避免ul不存在时报错
links = len(target_ul.find_all('li')) if target_ul else 0
return links

方法2:使用CSS选择器直接定位目标<li>

CSS选择器更简洁直观,可一步选中目标<ul>下的所有<li>:

browser.get(url)
c = browser.page_source
soup = BeautifulSoup(c, "html.parser")
# 用CSS选择器选中ul.listing_details下的所有li标签
li_elements = soup.select('ul.listing_details li')
links = len(li_elements)
return links

额外优化

代码中dom = etree.HTML(str(soup))这一行未被使用,属于冗余代码,可直接删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:28:28