1. 前言
因为近期在做一些行业客户群的数据分析,拿到600
多条客户信息,需要对其进行分析。由于所在的是To B
行业,所以只能先清理掉个人以及没有明确显示企业相关信息的数据。在此之后,需要基于这些企业名单,仔细分析各企业的情况。这可以通过爱企查的批量功能快速导出各企业的情况,但其要求模板中提供的企业名称必须是全称。
因此,我需要把剩下的500
多条企业数据的名称一一补全。一开始是打算使用DeepSeek
帮我基于关键词把企业名称补全,但反复验证后发现给的数据基本都是瞎编的。无奈之下,我只能一个一个查,具体操作是通过必应搜索关键词,比如"宁德时代",然后从搜索结果中找到完整的企业名称"宁德时代新能源科技股份有限公司"复制到表格中。
可是,如果只是几十条数据还好,这500
多条数据,我要查到猴年马月了,这人工操作实在太繁琐,而且效率太低了,实在忍不了,就想着怎么把这一整个流程实现自动化。
通过DeepSeek
查了下,可以使用Python
实现,但我没学过Python
,不过编程语言嘛,大同小异,就依葫芦画瓢,把教程走一遍。最开始是打算使用必应搜索API
实现的,因为必应搜索API
可以免费使用,虽然有额度,但对我来说已经足够。但在开通相关服务时需要用到VISA
卡,各种操作实在太麻烦了,只能研究其他方案。结果好几个方案验证都行不通,我都打算放弃了,想老老实实一个个查算了,但昨晚回去又研究了一下,发现Selenium
可以实现这个需求。
2. 需求描述
- 有一个
.txt
文档用来存放关键词,有一个.xlsx
表格用来存放输出的结果,表格格式包含两个表头:关键词、企业名称。 - 代码读取
.txt
文档中的关键词,依次通过必应搜索,将结果中来自爱企查的信息补充到表格的企业全称中。 - 对于来自爱企查的结果,去掉后缀" - 爱企查",只保留企业名称内容。
- 因为来自爱企查的结果通常很精准,所以第一次执行时,得到的相关公司信息基本不会有问题。
- 如果没有来自爱企查的结果,则可能是关键词信息有误,这种情况下只能默认选择第一个出现的企业名称。待全部匹配输出成功后,再通过人工逐一确认。由于这种情况通常不会很多,所以工作量相对较小。
- 提供一个变量,可以控制是否要获取来自爱企查的结果。如果设置为"是",则限制结果必须来自爱企查;否则选择必应搜索第一个出现的企业。
3. 项目地址
GitHub - dstweihao/bing-aiqicha-scraper
4. 项目结构
bash
bing-aiqicha-scraper/
├── keywords.txt # 输入关键词文件
├── 企业名称清单.xlsx # 输出文件
└── run.py # 主程序
5. 依赖安装
脚本需在Python 3.6及以上版本运行,检查Python版本:
css
python --version
创建虚拟环境:
bash
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
安装核心依赖:
pip install selenium webdriver-manager pandas openpyxl
其中,各依赖说明如下:
库名称 | 作用 | 安装命令 |
---|---|---|
selenium |
浏览器自动化控制 | pip install selenium |
webdriver-manager |
自动管理浏览器驱动 | pip install webdriver-manager |
pandas |
数据处理和Excel导出 | pip install pandas |
openpyxl |
增强Excel文件支持 | pip install openpyxl |
6. 脚本代码
./bing-aiqicha-scraper/run.py
python
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
import pandas as pd
import time
# 配置参数
with open("keywords.txt", "r") as f:
search_keywords = [line.strip() for line in f.readlines()]
output_file = "企业名称清单.xlsx"
USE_AIQICHA = True # 模式切换开关:True=仅爱企查结果,False=普通模式
def bing_search(keyword):
# 动态构建查询URL
query = f"{keyword}+site%3Aaiqicha.baidu.com" if USE_AIQICHA else keyword
driver.get(f"https://cn.bing.com/search?q={query}")
time.sleep(2)
try:
# 根据模式选择元素定位器
selector = 'li.b_algo h2 a[href*="aiqicha.baidu.com"]' if USE_AIQICHA else 'li.b_algo h2 a'
result = driver.find_element(By.CSS_SELECTOR, selector)
# 统一清理企业名称
clean_name = result.text.split(' - 爱企查')[0].split('【')[0].strip()
return clean_name, "爱企查" if USE_AIQICHA else "普通结果"
except Exception as e:
if not USE_AIQICHA:
# 普通模式降级处理:尝试获取第一个结果
try:
fallback = driver.find_element(By.CSS_SELECTOR, 'li.b_algo h2 a')
return fallback.text.split(' - ')[0].strip(), "普通结果(待确认)"
except:
return keyword, "未找到"
return keyword, "未找到(爱企查)"
# 启动浏览器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
# 批量处理(修改结果记录部分)
results = []
for kw in search_keywords:
name, source = bing_search(kw)
results.append({
"关键词": kw,
"企业全称": name,
"来源": source # 新增来源标识列
})
print(f"[{source}] {kw} -> {name}")
# 保存结果(增加列排序)
pd.DataFrame(results)[["关键词", "企业全称", "来源"]].to_excel(output_file, index=False)
driver.quit()
7. 运行验证
在网上随机找了一些企业进行验证,关键词示例如下:
极光动力
上海明我
易能数字能源
仅爱企查结果:

普通模式:

8. 真实应用
在真实使用过程中,可以结合企业微信文档进行操作。首先运行第一次查询,拿到"仅爱企查结果"。然后,通过爱企查的批量查询功能,将第一次查询得到的全部数据导入,进行批量查询。接着,从爱企查导出的表格中,筛选出"经营状态"为--
的条目(这些通常是无效或无法查询到的企业信息),并将这些条目复制到爱企查的导入模板中,再进行第二次导入,这次可以使用普通模式。这样基本能简化很多工作量。