某查企业信息快速收集工具开发
字数 936 2025-08-07 08:22:02
企业信息快速收集工具开发教学文档
0x00 工具概述
本工具用于自动化收集企业及其子公司在公网上的信息,包括公司名称、网址、邮箱等数据。主要功能是通过某查网站接口递归查询企业股权架构,获取全资子公司信息并导出为Excel和文本文件。
0x01 核心功能
- 企业ID获取:通过公司名称查询企业唯一ID
- 股权架构分析:获取企业股权架构页面数量
- 子公司递归查询:递归查询全资子公司信息
- 数据导出:将结果导出为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 关键接口分析
工具使用了以下关键接口:
-
搜索接口:
https://www.***cha.com/search?key=公司名 -
公司详情接口:
https://www.***cha.com/company/公司ID -
股权分页接口:
https://www.***cha.com/pagination/investV2.xhtml?ps=20&pn=页码&id=公司ID
0x04 使用说明
1. 准备工作
-
创建
cookie.ini文件,内容格式:COOKIE=从浏览器获取的cookie值 -
获取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 技术要点总结
-
递归查询技巧:
- 使用while循环和列表的pop方法实现递归查询
- 每次查询到新的子公司ID就添加到待查询列表
- 直到列表为空时结束查询
-
反反爬策略:
- 使用随机User-Agent
- 对频繁访问添加延时处理
- 支持cookie设置绕过限制
-
数据提取技巧:
- 结合字符串替换和索引定位提取关键数据
- 对特殊字符进行统一处理
- 使用xpath定位固定结构的元素
-
异常处理:
- 对可能失败的操作添加try-catch
- 返回默认值避免程序中断
0x06 优化建议
- 增加代理IP池支持,避免IP被封
- 添加多线程/协程支持,提高查询效率
- 完善异常处理和日志记录
- 增加数据去重功能
- 支持更多企业信息字段的提取
通过本工具,可以高效地收集企业及其子公司的公开信息,为后续的网络安全评估和数据泄露检测提供基础数据支持。