基于Selenium实现的必应企业信息抓取工具

1. 前言

因为近期在做一些行业客户群的数据分析,拿到600多条客户信息,需要对其进行分析。由于所在的是To B行业,所以只能先清理掉个人以及没有明确显示企业相关信息的数据。在此之后,需要基于这些企业名单,仔细分析各企业的情况。这可以通过爱企查的批量功能快速导出各企业的情况,但其要求模板中提供的企业名称必须是全称。

因此,我需要把剩下的500多条企业数据的名称一一补全。一开始是打算使用DeepSeek帮我基于关键词把企业名称补全,但反复验证后发现给的数据基本都是瞎编的。无奈之下,我只能一个一个查,具体操作是通过必应搜索关键词,比如"宁德时代",然后从搜索结果中找到完整的企业名称"宁德时代新能源科技股份有限公司"复制到表格中。

可是,如果只是几十条数据还好,这500多条数据,我要查到猴年马月了,这人工操作实在太繁琐,而且效率太低了,实在忍不了,就想着怎么把这一整个流程实现自动化。

通过DeepSeek查了下,可以使用Python实现,但我没学过Python,不过编程语言嘛,大同小异,就依葫芦画瓢,把教程走一遍。最开始是打算使用必应搜索API实现的,因为必应搜索API可以免费使用,虽然有额度,但对我来说已经足够。但在开通相关服务时需要用到VISA卡,各种操作实在太麻烦了,只能研究其他方案。结果好几个方案验证都行不通,我都打算放弃了,想老老实实一个个查算了,但昨晚回去又研究了一下,发现Selenium可以实现这个需求。

2. 需求描述

  1. 有一个.txt文档用来存放关键词,有一个.xlsx表格用来存放输出的结果,表格格式包含两个表头:关键词、企业名称。
  2. 代码读取.txt文档中的关键词,依次通过必应搜索,将结果中来自爱企查的信息补充到表格的企业全称中。
  3. 对于来自爱企查的结果,去掉后缀" - 爱企查",只保留企业名称内容。
  4. 因为来自爱企查的结果通常很精准,所以第一次执行时,得到的相关公司信息基本不会有问题。
  5. 如果没有来自爱企查的结果,则可能是关键词信息有误,这种情况下只能默认选择第一个出现的企业名称。待全部匹配输出成功后,再通过人工逐一确认。由于这种情况通常不会很多,所以工作量相对较小。
  6. 提供一个变量,可以控制是否要获取来自爱企查的结果。如果设置为"是",则限制结果必须来自爱企查;否则选择必应搜索第一个出现的企业。

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. 真实应用

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

相关推荐
Jolyne_几秒前
css实现圆柱体
前端·css·react.js
亦黑迷失7 分钟前
canvas + ts 实现将图片一分为二的功能,并打包发布至 npm
前端·typescript·canvas
....49212 分钟前
antvX6自定义 HTML 节点创建与更新教程
前端·html·antvx6
禹曦a15 分钟前
Web开发:常用 HTML 表单标签介绍
前端·html·web
nlog3n22 分钟前
Java备忘录模式详解
java·python·备忘录模式
姑苏洛言37 分钟前
如何让用户回到上次阅读的位置?——前端视角下的用户体验优化实践
前端
kovlistudio42 分钟前
红宝书第三十一讲:通俗易懂的包管理器指南:npm 与 Yarn
开发语言·前端·javascript·学习·npm·node.js
我爱吃干果1 小时前
ZoomCharts使用方法
前端·javascript·笔记·zoom
Yharim1 小时前
wxPython官方文档中文翻译 - TipProvider概述
python
旧厂街小江1 小时前
LeetCode 第111题:二叉树的最小深度
前端·算法·程序员