如何用Pytrends循环实现多企业Google Trends数据自动分存CSV
Pytrends批量导出企业Google Trends数据至独立CSV文件
我用Pytrends从Google Trends采集多家企业的数据,代码能正常采集数据,但循环运行时每次都把数据写入同一个data.csv,导致每个导出的文件只包含单个企业的数据,我需要给每家企业生成独立的CSV文件。
我的代码如下:
firms = ['Gecina','Covivio','Genesis Energy','Atland','Mercury NZ','Klepierre','Electricite de France','Nexity','Veolia Environnement'] for firm in cities: # build model pytrend = TrendReq(hl='en-US') keywords = [firm] pytrend.build_payload( kw_list=keywords, cat=0, timeframe='2012-11-01 2017-07-02') data = pytrend.interest_over_time() data = data.drop(labels=['isPartial'],axis='columns') data.to_csv('data.csv') files.download('data.csv')
问题分析
- 循环变量错误:定义了企业列表
firms,但循环中使用未定义的cities,会直接导致运行报错。 - 文件名固定:每次循环都写入同一个
data.csv,后一次数据会覆盖前一次,最终导出的文件永远是最后一个企业的数据。
修正方案
- 修正循环变量,匹配定义的企业列表;
- 为每个企业生成唯一文件名,避免覆盖;
- 优化TrendReq实例创建,提升运行效率。
修改后的完整代码
from pytrends.request import TrendReq # 若使用Colab环境,需导入files模块 # from google.colab import files firms = ['Gecina','Covivio','Genesis Energy','Atland','Mercury NZ','Klepierre','Electricite de France','Nexity','Veolia Environnement'] # 仅初始化一次TrendReq实例,无需循环重复创建 pytrend = TrendReq(hl='en-US') for firm in firms: keywords = [firm] pytrend.build_payload( kw_list=keywords, cat=0, timeframe='2012-11-01 2017-07-02') data = pytrend.interest_over_time() # 检查数据非空,避免无数据时执行drop报错 if not data.empty: data = data.drop(labels=['isPartial'], axis='columns') # 生成专属文件名,替换空格为下划线避免路径问题 filename = f"{firm.replace(' ', '_')}_trends.csv" data.to_csv(filename) files.download(filename)
关键说明
- 将
TrendReq初始化移至循环外,减少重复实例创建的开销; - 用
firm.replace(' ', '_')处理企业名称中的空格,生成格式统一的文件名(如Genesis_Energy_trends.csv); - 增加数据非空检查,避免部分企业无趋势数据时触发报错。
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

