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

如何用BeautifulSoup提取网页<li>标签中的更多参展商数据?

问题:如何提取参展商列表中更多
  • 标签内的数据?
  • 我已经用BeautifulSoup获取到参展商的公司名称和国家信息,代码如下:

    from bs4 import BeautifulSoup
    import requests
    
    url ="https://www.cosmoprof.com/en/visit/exhibitors-directory/exhibitors-list/?y=0&page=1"
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')
    
    results = soup.find_all("div", class_="col-md-3 result-item mb-40")
    
    for result in results:
        company = result.find("h3")
        country = result.find("li")
        
    
        print(f"company:{company.get_text()}")
        print(f"country:{country.get_text()}")
    

    输出结果:

    company:LABORATOIRE REVITACARE
    country: COUNTRY/REGION: France
    company:LONDONTOWN INC.
    country: COUNTRY/REGION: USA
    

    但尝试提取Sector、Hall等更多

  • 标签内的数据时遇到困难,目标HTML结构如下:

    <div class="col-md-3 result-item mb-40">
    <span class="tag-new">new 2023</span>
    <h3>LABORATOIRE REVITACARE</h3>
    <ul class="lista-dati-espositore" style="min-height:110px;">
    <li><span> COUNTRY/REGION:</span> France</li>
    <li style="min-height:50px;"><span> Sector:</span> Beauty &amp; Spa</li>
    <li><span> Hall:</span> 29</li>
    <li>
    <span> Stand No.:</span>
                                                                    E/12
                                                             </li>
    <li><span> Opening dates:</span> From 17 to 20 March 2023</li>
    </ul>
    <a href="/en/visit/exhibitors-directory/exhibitors-list/exhibitor-details/?id=22838&amp;s=laboratoire-revitacare" title="LABORATOIRE REVITACARE"> Find out more</a>
    

    解决方案

    可以通过两种方式提取所有

  • 标签内的数据:

    方法一:遍历所有字段

    先定位到每个参展商的<ul>标签(class为lista-dati-espositore),再遍历其中的所有<li>,自动提取标签和对应内容:

    from bs4 import BeautifulSoup
    import requests
    
    url = "https://www.cosmoprof.com/en/visit/exhibitors-directory/exhibitors-list/?y=0&page=1"
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')
    
    results = soup.find_all("div", class_="col-md-3 result-item mb-40")
    
    for result in results:
        # 获取公司名称,去除首尾空格
        company_name = result.find("h3").get_text(strip=True)
        print(f"公司名称: {company_name}")
        
        # 定位到参展信息的列表容器
        info_container = result.find("ul", class_="lista-dati-espositore")
        if info_container:
            # 遍历每个列表项
            for li in info_container.find_all("li"):
                # 提取标签文本(如COUNTRY/REGION:)
                label = li.find("span").get_text(strip=True)
                # 提取对应值,去除标签和多余空格
                value = li.get_text(strip=True).replace(label, "").strip()
                print(f"{label} {value}")
        print("---")
    

    方法二:精准提取指定字段

    如果只需要特定字段(比如Sector、Hall、展位号),可以通过匹配<span>内的文本定位对应的<li>:

    from bs4 import BeautifulSoup
    import requests
    
    url = "https://www.cosmoprof.com/en/visit/exhibitors-directory/exhibitors-list/?y=0&page=1"
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')
    
    results = soup.find_all("div", class_="col-md-3 result-item mb-40")
    
    for result in results:
        company_name = result.find("h3").get_text(strip=True)
        print(f"公司名称: {company_name}")
        
        # 提取国家/地区
        country_item = result.find("li", string=lambda text: "COUNTRY/REGION:" in text)
        if country_item:
            country = country_item.get_text(strip=True).split(":")[-1].strip()
            print(f"国家/地区: {country}")
        
        # 提取行业领域
        sector_item = result.find("li", string=lambda text: "Sector:" in text)
        if sector_item:
            sector = sector_item.get_text(strip=True).split(":")[-1].strip()
            print(f"行业领域: {sector}")
        
        # 提取展馆号
        hall_item = result.find("li", string=lambda text: "Hall:" in text)
        if hall_item:
            hall = hall_item.get_text(strip=True).split(":")[-1].strip()
            print(f"展馆号: {hall}")
        
        # 提取展位号
        stand_item = result.find("li", string=lambda text: "Stand No.:" in text)
        if stand_item:
            stand_no = stand_item.get_text(strip=True).split(":")[-1].strip()
            print(f"展位号: {stand_no}")
        
        # 提取开放日期
        dates_item = result.find("li", string=lambda text: "Opening dates:" in text)
        if dates_item:
            dates = dates_item.get_text(strip=True).split(":")[-1].strip()
            print(f"开放日期: {dates}")
        print("---")
    

    说明

    • 使用get_text(strip=True)可以自动去除文本前后的空格、换行符,避免输出杂乱内容。
    • 方法一适合批量提取所有字段,方法二更适合按需获取特定信息,可根据需求选择。

    内容的提问来源于stack exchange,提问作者Eskild Næss

  • 相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.07.29 03:23:31