如何实现Google搜索首条结果追加至df,批量查找企业可持续发展报告?
代码调整实现方案
你需要调整循环逻辑,遍历数据集的每一行拼接自定义搜索词,同时兼容无搜索结果的异常场景,调整后可运行的完整代码如下:
from googlesearch import search import pandas as pd # 读取原始数据集 df = pd.read_csv('ACgr.csv', index_col=0) # 用于存储每条搜索的第一条结果 report_links = [] # 遍历每一行企业数据 for idx, row in df.iterrows(): # 拼接指定格式的搜索关键词 query = f"{row['company_name']} {row['company_country']} sustainability report OR Net zero" try: # 取搜索结果的第一条,pause参数建议不低于2秒,避免触发Google反爬限制 first_result = next(search(query, tld="com", num=1, stop=1, pause=2)) report_links.append(first_result) except Exception as e: # 无搜索结果/触发反爬时填充空值,避免程序中断 report_links.append(None) print(f"企业{row['company_name']}搜索失败,错误信息:{str(e)}") # 将结果追加到原DataFrame,也可以单独生成新的df df['sustainability_report_link'] = report_links # 可选:导出结果到新csv df.to_csv('ACgr_with_report_links.csv', encoding='utf-8-sig') print(df)
关键调整说明
- 替换原有固定查询词的循环逻辑,改为遍历
df的每一行,按要求拼接企业专属搜索词 - 使用
next()直接提取搜索返回的第一条结果,避免返回生成器对象无法直接存储的问题 - 增加异常捕获逻辑,处理无搜索结果、IP被临时限制等异常场景,保证批量运行不中断
- 最终将搜索结果直接写入原DataFrame的新列,也可按需单独生成新的DataFrame存储结果
注意事项
pause参数不要设置过短,否则容易触发Google的反爬机制,导致IP被临时封禁无法继续搜索- 如果企业以中文名称为主,可将
tld参数调整为com.hk或者cn,更适配中文搜索结果 - 部分未公开可持续发展/净零报告的企业会返回空值,可后续手动补充对应数据
内容的提问来源于stack exchange,提问作者Nick Gordon
相关产品推荐
相关产品推荐

