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

如何用BeautifulSoup从指定HTML结构提取多类新闻信息

提取特定HTML新闻信息并转为DataFrame

假设你已经通过BeautifulSoup获取到了所有新闻条目列表news_items = soup.find_all('li', class_='list-group-item te-stream-item'),接下来可以按以下步骤拆分提取所需字段,最终生成DataFrame:

步骤1:初始化存储容器

先创建一个空列表,用于存放每条新闻的结构化数据:

import pandas as pd

news_data = []

步骤2:遍历每条新闻条目,提取字段

对每个li条目逐一处理:

for item in news_items:
    # 1. 提取新闻标题
    title_tag = item.find('a', class_='te-stream-title')
    news_title = title_tag.get_text(strip=True) if title_tag else ''
    
    # 2. 提取新闻分类(支持多分类拼接)
    category_div = item.find('div', class_='pull-right')
    if category_div:
        # 假设分类是div下的多个<a>标签,可根据实际标签调整
        category_tags = category_div.find_all('a')
        news_categories = ', '.join([tag.get_text(strip=True) for tag in category_tags])
    else:
        news_categories = ''
    
    # 3. 提取新闻内容与更新时间(拆分<br>前后文本)
    # 替换为网页中实际的master节点选择器,比如对应的class或标签
    master_node = item.find('div', class_='master')
    news_content = ''
    update_time = ''
    if master_node:
        # 过滤掉空内容,拆分<br>前后的有效文本
        contents = [elem.strip() for elem in master_node.contents if elem.strip()]
        if len(contents) >= 2:
            news_content = contents[0]
            update_time = contents[1]
    
    # 将本条新闻数据存入字典,添加到列表
    news_data.append({
        '新闻标题': news_title,
        '新闻分类': news_categories,
        '新闻内容': news_content,
        '更新时间': update_time
    })

步骤3:转换为DataFrame

将结构化的列表数据转为DataFrame:

news_df = pd.DataFrame(news_data)
# 查看结果
print(news_df.head())

注意事项

  • 若master节点的实际标签或class不是div.master,请替换为网页中对应的选择器(比如p标签或其他class名)。
  • 如果分类的承载标签不是<a>(比如<span>),需要调整category_div.find_all('a')中的标签名。
  • 加入if xxx else ''的判断是为了避免部分新闻缺失字段导致报错,可根据需求改为None或其他默认值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:31:04