如何用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
相关产品推荐
相关产品推荐

