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

如何用BeautifulSoup提取div标签内的li元素信息

使用BeautifulSoup提取div内li元素的name和fullname信息

没问题,我来帮你搞定这个提取需求!先看看你的问题场景:

我正在尝试使用BeautifulSoup提取div标签内的li元素信息。以下是我处理的div示例代码:

<div class="list"> 
  <a href="/name1" target="_blank" title="name1"> 
    <img alt="name1" src="https://img.url.com/name1"/> 
    <ul> 
      <li>name1</li> 
      <li>fullname1</li> 
    </ul> 
  </a> 
  <a href="/name2" target="_blank" title="name2"> 
    <img alt="name2" src="https://img.url.com/name2"/> 
    <ul> 
      <li>name2</li> 
      <li>fullname2</li> 
    </ul> 
  </a> 
  <a href="/name3" target="_blank" title="name3"> 
    <img alt="name3" src="https://img.url.com/name3"/> 
    <ul> 
      <li>name3</li> 
      <li>fullname3</li> 
    </ul> 
  </a> 
</div>

我想要提取每个li中的'name'和'fullname'文本。我认为需要使用for循环遍历列表,但不确定具体实现方式(实际列表条目远多于3条);同时也不清楚如何让soup区分第一个<li>name</li>和第二个<li>fullname</li>标签,恳请提供帮助!


核心思路

你的方向完全正确,确实需要遍历每个包含ul的a标签,再通过索引定位或者CSS选择器来区分两个li元素——毕竟每个ul里的li顺序是固定的(name在前,fullname在后)。

具体实现代码

先看完整示例,我会一步步给你解释:

from bs4 import BeautifulSoup

# 假设你的HTML内容存在这个变量里(实际场景可以是爬取到的网页内容)
html_content = """
<div class="list"> 
  <a href="/name1" target="_blank" title="name1"> 
    <img alt="name1" src="https://img.url.com/name1"/> 
    <ul> 
      <li>name1</li> 
      <li>fullname1</li> 
    </ul> 
  </a> 
  <a href="/name2" target="_blank" title="name2"> 
    <img alt="name2" src="https://img.url.com/name2"/> 
    <ul> 
      <li>name2</li> 
      <li>fullname2</li> 
    </ul> 
  </a> 
  <a href="/name3" target="_blank" title="name3"> 
    <img alt="name3" src="https://img.url.com/name3"/> 
    <ul> 
      <li>name3</li> 
      <li>fullname3</li> 
    </ul> 
  </a> 
</div>
"""

# 初始化BeautifulSoup,用html.parser解析器
soup = BeautifulSoup(html_content, 'html.parser')

# 精准定位到class为list的div下所有的a标签(每个a对应一个条目)
items = soup.select('div.list a')

# 遍历每个条目,提取数据
for item in items:
    # 找到当前a标签下的ul,再取出里面所有li
    li_elements = item.find('ul').find_all('li')
    # 通过索引区分第一个(name)和第二个(fullname)li
    name = li_elements[0].get_text(strip=True)
    fullname = li_elements[1].get_text(strip=True)
    # 这里可以把数据存储到列表/字典,或者直接打印
    print(f"名称: {name}, 全名: {fullname}")

代码细节说明

  1. 定位条目:soup.select('div.list a') 用CSS选择器精准锁定目标,不管你的列表有多少条,都能一次性获取所有条目。
  2. 区分li:利用列表索引[0]和[1]直接取ul下的第一个、第二个li,完美匹配你的需求。
  3. 清理文本:get_text(strip=True) 会自动去除文本前后的空格、换行符,避免提取到多余的空白内容。

更简洁的写法(直接用CSS选择器定位li)

如果你想让代码更紧凑,也可以直接用CSS的nth-of-type选择器定位指定位置的li:

for item in soup.select('div.list a'):
    # 直接选择ul下的第1个li
    name = item.select_one('ul li:nth-of-type(1)').get_text(strip=True)
    # 直接选择ul下的第2个li
    fullname = item.select_one('ul li:nth-of-type(2)').get_text(strip=True)
    print(f"名称: {name}, 全名: {fullname}")

两种写法都能完美解决你的问题,选你看着顺手的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:28