You need to enable JavaScript to run this app. 向pandas DataFrame回填GoogleNews搜索关键词报KeyError及跨年度按月爬取合并问题
优惠活动
大模型
产品
解决方案
定价
更多

向pandas DataFrame回填GoogleNews搜索关键词报KeyError及跨年度按月爬取合并问题

两类核心问题的原因定位与解决方法

1. KeyError: 'compn'报错的修复

  • 报错触发场景:执行新闻关键词回填逻辑时,运行dict['Ticker'] = df['compn'][ind]代码,在Google Colab环境下抛出pandas列不存在的异常,最终导致生成的新闻数据集无法匹配对应的搜索公司主体。
  • 根本原因:GoogleNews搜索接口返回的原始结果DataFrame,本身不存在compn列,代码错误将“需要新增的标记列”等同于“已存在的返回列”进行索引取值。
  • 修复方案:跳过对不存在列的取值操作,直接复用外层遍历公司列表的循环变量完成字段回填
    • 正确逻辑示例:
      company_list = ["Morgan Stanley","Evercore ISI","JP Morgan"]
      total_news_records = []
      # 遍历公司列表的外层循环
      for current_company in company_list:
          # 初始化GoogleNews搜索、生成分页结果的逻辑
          gnews = GoogleNews(start=search_start, end=search_end)
          gnews.search(current_company)
          search_result_df = gnews.get_page()
          # 逐行解析新闻内容
          for idx, row in search_result_df.iterrows():
              single_news = {}
              # 直接赋值当前循环的公司名,无需从DataFrame读取不存在的列
              single_news['Ticker'] = current_company
              # 后续调用Article模块下载、解析新闻,填充其余字段
              total_news_records.append(single_news)
      
    • 优化说明:无需在原始搜索返回的DataFrame中预写入compn列再取值,直接复用循环状态变量的写法更简洁,也从根源上避免了列不存在的报错。

2. 跨全周期爬取的实现方案

  • 平台限制:GoogleNews单次搜索最多返回约200篇新闻,现有固定单时间范围的搜索逻辑,无法覆盖2019年10月1日至2020年10月的全量相关新闻。
  • 核心实现思路:按时间粒度拆分目标周期,逐段执行搜索,累加所有分段结果生成统一数据集。
  • 落地步骤:
    • 时间块拆分:将全周期按自然月拆分为独立的搜索时间区间,单区间内的某公司相关新闻量通常远低于200篇的返回上限,不会触发结果截断。
    • 循环搜索:对每个拆分后的时间块,遍历所有目标公司关键词,逐组执行搜索、解析流程。
    • 结果整合:将每个搜索任务产出的单条新闻记录,统一追加到全局结果列表中,所有循环结束后一次性转换为最终的整合DataFrame。
  • 时间拆分逻辑示例:
    import pandas as pd
    from dateutil.relativedelta import relativedelta
    
    # 定义全周期爬取范围
    total_start = pd.to_datetime("2019-10-01")
    total_end = pd.to_datetime("2020-10-31")
    global_result = []
    
    current_segment_start = total_start
    while current_segment_start <= total_end:
        # 计算当前月度时间块的结束边界
        current_segment_end = current_segment_start + relativedelta(months=1) - relativedelta(days=1)
        # 对每个公司在当前时间块执行搜索、解析逻辑,把单条结果append到global_result
        for company in company_list:
            # 单段搜索、解析逻辑同修复后的单流程
        # 移动到下一个时间块
        current_segment_start = current_segment_start + relativedelta(months=1)
    
    # 所有循环完成后生成最终整合数据集
    final_dataset = pd.DataFrame(global_result)
    
  • 适配说明:如果某单月内特定公司的相关新闻量接近200篇的返回上限,可以将拆分粒度进一步调整为按周,确保单段搜索的结果不会被平台截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 16:45:03