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

Beautiful Soup正则表达式提取含billion的<li>标签内容遇空列表问题

解决Beautiful Soup提取含"billion"的
  • 内容为空的问题
  • 嘿,我来帮你搞定这个提取失败的问题!先看看你代码里的几个关键问题,再给你修正后的解决方案:

    问题1:标签名的写法错误

    你写的soup.findAll("<li>", {"class": "tabcontent"})里,标签名不该带尖括号<>,Beautiful Soup的find_all(现在更推荐用小写的find_all,和findAll功能完全一致)第一个参数需要的是纯标签名,比如直接写"li"就好。

    另外,因为class是Python的关键字,用它作为筛选条件时,要么写成class_="tabcontent",要么保持字典形式{"class": "tabcontent"},前者更简洁直观。

    问题2:找错了目标元素的位置

    我查了下你目标页面的结构,包含"billion"的内容并不在class为tabcontent的<li>里,而是在div.tab-content这个容器下的子元素中。所以需要先定位到正确的父容器,再提取里面的<li>。

    修正后的完整代码

    import requests
    from bs4 import BeautifulSoup
    import re
    
    url = 'http://www.worldstopexports.com/united-states-top-10-exports/'
    headers = { 
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
    }
    
    # 发送请求并确保请求成功
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 定位到包含目标内容的tab容器
    tab_container = soup.find('div', class_='tab-content')
    # 提取容器内所有<li>标签
    all_li_items = tab_container.find_all('li')
    
    # 筛选出包含"billion"的内容行
    billion_content = [item.get_text(strip=True) for item in all_li_items if 'billion' in item.get_text(strip=True)]
    
    # 输出结果
    for line in billion_content:
        print(line)
    

    更灵活的筛选方式:用正则表达式

    如果你想忽略大小写匹配(比如匹配"Billion"或"billion"),可以结合正则表达式直接筛选<li>:

    # 直接匹配所有文本中包含"billion"的<li>,忽略大小写
    billion_li_items = soup.find_all('li', string=re.compile(r'billion', re.IGNORECASE))
    # 提取清理后的文本
    billion_content = [item.get_text(strip=True) for item in billion_li_items]
    

    额外小贴士

    • 提取文本时用get_text(strip=True)可以自动去掉多余的空格、换行符,让内容更整洁,也方便判断是否包含目标关键词。
    • 如果不确定元素的位置,可以用浏览器的开发者工具(F12)查看页面结构,找到目标元素的父容器或正确的class/id。

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

    相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.05.20 11:27:49