某查企业信息快速收集工具开发
字数 936 2025-08-07 08:22:02

企业信息快速收集工具开发教学文档

0x00 工具概述

本工具用于自动化收集企业及其子公司在公网上的信息,包括公司名称、网址、邮箱等数据。主要功能是通过某查网站接口递归查询企业股权架构,获取全资子公司信息并导出为Excel和文本文件。

0x01 核心功能

  1. 企业ID获取:通过公司名称查询企业唯一ID
  2. 股权架构分析:获取企业股权架构页面数量
  3. 子公司递归查询:递归查询全资子公司信息
  4. 数据导出:将结果导出为Excel和文本文件

0x02 技术实现

1. 主要依赖库

import requests       # HTTP请求
import optparse       # 命令行参数解析
from urllib.parse import quote, unquote  # URL编码/解码
from lxml import etree  # HTML解析
from openpyxl import Workbook  # Excel操作
import time           # 时间处理

2. 核心函数解析

2.1 字符串提取函数

def Get_MiddleStr(content, startStr, endStr, num):
    """
    获取中间字符串的通用函数
    :param content: 原始字符串
    :param startStr: 开始标记
    :param endStr: 结束标记
    :param num: 偏移量
    :return: 提取的字符串或'ok'(失败时)
    """
    try:
        startIndex = content.index(startStr)
        if startIndex >= 0:
            if num != 1:
                endIndex = startIndex
                startIndex = endIndex + num
            else:
                startIndex += len(startStr)
            endIndex = content.index(endStr)
            return content[startIndex:endIndex]
    except:
        return 'ok'

2.2 企业ID获取

def Get_Company_Id(company_name, company_name_list):
    """
    获取公司查询ID
    :param company_name: 单个公司名
    :param company_name_list: 公司名列表文件
    :return: 公司ID列表
    """
    company_id_list = []
    url = "https://www.***cha.com/search?key="
    endstr = "target='_blank'>"
    starstr = "https://www.***cha.com/company/"
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
    
    if company_name != None:
        response = requests.get(url=url + quote(company_name, 'utf-8'), headers=header).text
        resp = response.replace(' ', '').replace('\n', '').replace('\t', '').replace("\"", "")
        company_id_list.append(Get_MiddleStr(resp, starstr, endstr, 1))
    else:
        with open(company_name_list, 'r', encoding='utf-8') as f:
            for company in f:
                response = requests.get(url=url+quote(company, 'utf-8'), headers=header).text
                resp = response.replace(' ', '').replace('\n', '').replace('\t', '').replace("\"", "")
                company_id_list.append(Get_MiddleStr(resp, starstr, endstr, 1))
    return company_id_list

2.3 股权架构页面数量获取

def Get_Page_Num(company_id):
    """
    获取网页股权架构图页面数量
    :param company_id: 公司ID
    :return: 页面数量
    """
    company_url = "https://www.***cha.com/company/" + company_id
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
    response = requests.get(url=company_url, headers=header).text
    resp = response.replace(' ', '').replace('\n', '').replace('\t', '').replace("\"", "")
    page_num = Get_MiddleStr(resp, 'num-endonclick=companyPageChange(', ',this', 3)
    
    if page_num == 'ok':
        return 'ok'
    else:
        if page_num[len(page_num)-1:] == ',':
            page_real_num = page_num[0:2]
        else:
            page_real_num = page_num[0:1]
        return page_real_num

2.4 子公司信息递归查询

def Get_ALL_Sub_Cmpany_Domain(company_id):
    """
    获取公司占百分百股权且未注销的子公司域名信息
    :param company_id: 公司ID列表
    :return: 公司信息列表, 公司URL列表
    """
    company_info_list = []
    company_url_list = []
    
    for main_company in company_id:
        l, l2 = Get_Sub_Company_Domain(main_company)
        if len(l) != 0:
            for i in l:
                company_info_list.append(i)
        if len(l2) != 0:
            for i2 in l2:
                company_url_list.append(i2)
        
        com_id = []
        com_id.append(main_company)
        
        while com_id:
            co_id = com_id.pop(0)
            company_id_list = get_all_page_id(co_id)
            if len(company_id_list) != 0:
                for co in company_id_list:
                    com_id.append(co)
                for ci in company_id_list:
                    l, l2 = Get_Sub_Company_Domain(ci)
                    if len(l) != 0:
                        for i in l:
                            company_info_list.append(i)
                    if len(l2) != 0:
                        for i2 in l2:
                            company_url_list.append(i2)
    return company_info_list, company_url_list

2.5 数据导出功能

def Write_To_Excel(company_info_list):
    """
    将公司信息写入Excel
    :param company_info_list: 公司信息列表
    """
    t = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
    wb = Workbook()
    ws = wb.active
    ws['A1'] = '公司名'
    ws['B1'] = '网址'
    ws['C1'] = '邮箱'
    
    for l in company_info_list:
        ws.append(list(l))
    
    ws.column_dimensions['A'].width = 36
    ws.column_dimensions['B'].width = 36
    ws.column_dimensions['C'].width = 36
    wb.save("company_info_list"+t+".xlsx")

def Write_To_Txt(company_url_list):
    """
    将公司URL写入文本文件
    :param company_url_list: 公司URL列表
    """
    t = time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime())
    with open('company_url_list'+t+'.txt', 'w+', encoding='utf-8') as f:
        for c in company_url_list:
            f.writelines(c+'\n')

0x03 关键接口分析

工具使用了以下关键接口:

  1. 搜索接口

    https://www.***cha.com/search?key=公司名
    
  2. 公司详情接口

    https://www.***cha.com/company/公司ID
    
  3. 股权分页接口

    https://www.***cha.com/pagination/investV2.xhtml?ps=20&pn=页码&id=公司ID
    

0x04 使用说明

1. 准备工作

  1. 创建cookie.ini文件,内容格式:

    COOKIE=从浏览器获取的cookie值
    
  2. 获取cookie的方法:

    • 登录某查网站
    • 查询任意公司
    • 在股权架构图中点击非第一页的页码
    • 通过抓包工具获取请求中的cookie

2. 运行方式

方式一:批量查询公司(通过文件)

python3 Tyz_Get_Info.py -o 100 -l test.txt

方式二:单公司查询

python3 Tyz_Get_Info.py -o 100 -c "公司名"

参数说明:

  • -o/--occ:股权占比阈值(默认100,即全资子公司)
  • -l/--list:包含公司名的文本文件
  • -c/--company:单个公司名

0x05 技术要点总结

  1. 递归查询技巧

    • 使用while循环和列表的pop方法实现递归查询
    • 每次查询到新的子公司ID就添加到待查询列表
    • 直到列表为空时结束查询
  2. 反反爬策略

    • 使用随机User-Agent
    • 对频繁访问添加延时处理
    • 支持cookie设置绕过限制
  3. 数据提取技巧

    • 结合字符串替换和索引定位提取关键数据
    • 对特殊字符进行统一处理
    • 使用xpath定位固定结构的元素
  4. 异常处理

    • 对可能失败的操作添加try-catch
    • 返回默认值避免程序中断

0x06 优化建议

  1. 增加代理IP池支持,避免IP被封
  2. 添加多线程/协程支持,提高查询效率
  3. 完善异常处理和日志记录
  4. 增加数据去重功能
  5. 支持更多企业信息字段的提取

通过本工具,可以高效地收集企业及其子公司的公开信息,为后续的网络安全评估和数据泄露检测提供基础数据支持。

企业信息快速收集工具开发教学文档 0x00 工具概述 本工具用于自动化收集企业及其子公司在公网上的信息,包括公司名称、网址、邮箱等数据。主要功能是通过某查网站接口递归查询企业股权架构,获取全资子公司信息并导出为Excel和文本文件。 0x01 核心功能 企业ID获取 :通过公司名称查询企业唯一ID 股权架构分析 :获取企业股权架构页面数量 子公司递归查询 :递归查询全资子公司信息 数据导出 :将结果导出为Excel和文本文件 0x02 技术实现 1. 主要依赖库 2. 核心函数解析 2.1 字符串提取函数 2.2 企业ID获取 2.3 股权架构页面数量获取 2.4 子公司信息递归查询 2.5 数据导出功能 0x03 关键接口分析 工具使用了以下关键接口: 搜索接口 : 公司详情接口 : 股权分页接口 : 0x04 使用说明 1. 准备工作 创建 cookie.ini 文件,内容格式: 获取cookie的方法: 登录某查网站 查询任意公司 在股权架构图中点击非第一页的页码 通过抓包工具获取请求中的cookie 2. 运行方式 方式一 :批量查询公司(通过文件) 方式二 :单公司查询 参数说明: -o/--occ :股权占比阈值(默认100,即全资子公司) -l/--list :包含公司名的文本文件 -c/--company :单个公司名 0x05 技术要点总结 递归查询技巧 : 使用while循环和列表的pop方法实现递归查询 每次查询到新的子公司ID就添加到待查询列表 直到列表为空时结束查询 反反爬策略 : 使用随机User-Agent 对频繁访问添加延时处理 支持cookie设置绕过限制 数据提取技巧 : 结合字符串替换和索引定位提取关键数据 对特殊字符进行统一处理 使用xpath定位固定结构的元素 异常处理 : 对可能失败的操作添加try-catch 返回默认值避免程序中断 0x06 优化建议 增加代理IP池支持,避免IP被封 添加多线程/协程支持,提高查询效率 完善异常处理和日志记录 增加数据去重功能 支持更多企业信息字段的提取 通过本工具,可以高效地收集企业及其子公司的公开信息,为后续的网络安全评估和数据泄露检测提供基础数据支持。