You need to enable JavaScript to run this app. 如何用python-docx按关键词分类遍历pandas新闻数据导出至Word
优惠活动
大模型
产品
解决方案
定价
更多

如何用python-docx按关键词分类遍历pandas新闻数据导出至Word

实现按关键词分层导出Word的方案

问题根源

当前导出逻辑逐行遍历数据框的每一条记录,每读到一篇文章就把对应关键词作为一级标题插入文档,自然会让同一个关键词在多篇关联文章前重复出现。要实现“关键词仅在分类顶部展示一次、下方排列所有关联文章”的效果,核心思路是先按关键词对数据分组,每个分类只插入一次标题,再遍历分组内的所有文章渲染内容。

核心实现代码(替换原有python-docx循环逻辑)

from docx import Document

# 初始化文档
document = Document()
# 先按关键词排序,保证同分类的文章连续排列
df_sorted = df.sort_values(by='keyword', ignore_index=True)

# 按keyword字段分组,遍历每个分类
for keyword, article_group in df_sorted.groupby('keyword', sort=False):
    # 每个关键词仅执行一次:插入一级标题
    document.add_heading(keyword, level=1)
    # 遍历当前分类下的所有文章
    for _, article in article_group.iterrows():
        # 插入带下划线的文章标题
        title_paragraph = document.add_paragraph()
        title_paragraph.add_run(article['title']).underline = True
        # 以项目符号样式插入文章描述、链接、来源
        document.add_paragraph(article['desc'], style='List Bullet')
        document.add_paragraph(article['link'], style='List Bullet')
        document.add_paragraph(f"Source: {article['site']}", style='List Bullet')
    # 每个分类渲染完成后插入空段落,和下一个分类做视觉分隔
    document.add_paragraph()

# 保存文档
document.save("news_report.docx")

原代码的细节修正提示

  • 原循环中出现的dfs['title'][i]属于变量名笔误,多写了后缀s,会触发键值错误,需要统一和数据框变量名保持一致
  • 原抓取循环中使用的df_ivar.append(df)是pandas已废弃的写法,频繁在循环中拼接数据框会大幅降低运行效率,推荐用空列表收集所有抓取结果,最后统一用pd.concat拼接为完整数据框:
    # 优化后的抓取逻辑
    all_crawled_data = []
    keyword_list = ["你实际要抓取的关键词列表"]
    for kw in keyword_list:
        googlenews = GoogleNews()
        googlenews.get_news(kw)
        googlenews.set_lang('en')
        googlenews.set_period('1d')
        result = googlenews.result()
        df_ivar = pd.DataFrame(result)
        # 过滤24小时内的有效文章
        df_ivar = df_ivar[df_ivar['date'].notna()]
        df_ivar = df_ivar[df_ivar["date"].str.contains('hours ago')]
        df_ivar = df_ivar[['site', 'title', 'desc', 'link']]
        df_ivar['keyword'] = kw
        all_crawled_data.append(df_ivar)
    # 所有关键词抓取完成后统一生成最终数据框
    df = pd.concat(all_crawled_data, ignore_index=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 13:45:06