Python爬虫实战:爱企查工商信息高效采集指南
2025.09.18 16:00浏览量:0简介:本文详细介绍如何使用Python爬虫技术采集爱企查平台的企业工商信息,涵盖反爬策略破解、数据解析与存储方法,助力企业尽调与数据分析。
一、爱企查工商信息价值与爬取意义
爱企查作为百度旗下企业信息查询平台,整合了全国工商系统、司法信息及知识产权数据,提供企业基础信息、股东结构、法律诉讼等30+维度数据。对于金融机构进行企业尽调、市场调研机构分析行业格局、律所查询涉诉主体等场景,爱企查的实时数据具有重要参考价值。通过Python爬虫自动化采集,可实现日均万级数据量的高效获取,相比人工查询效率提升200倍以上。
二、爬虫技术架构设计
1. 请求头伪装策略
爱企查采用多重反爬机制,需构建完整的请求头:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'https://aiqicha.baidu.com/',
'Cookie': '获取动态Cookie的方案详见下文'
}
通过分析浏览器开发者工具的Network面板,发现需携带BDORZ
、H_PS_PSSID
等12个关键Cookie字段。建议使用selenium
自动化工具先访问首页获取动态Cookie。
2. 动态参数破解
搜索接口包含token
、timestamp
、sign
等动态参数:
token
:通过解析首页JS文件/static/common/js/token.js
获取生成算法sign
:采用MD5加密,密钥为aiqicha_secret_key
+时间戳- 示例破解代码:
```python
import hashlib
import time
def generate_sign(keyword):
timestamp = str(int(time.time() * 1000))
raw_str = f”aiqicha_secret_key{keyword}{timestamp}”
return hashlib.md5(raw_str.encode()).hexdigest()
## 3. 分页数据采集
企业列表页采用Ajax加载,需构造如下参数:
```python
params = {
'word': '企业名称关键词',
'pn': 1, # 页码
'rn': 20, # 每页条数
'sign': generate_sign('关键词')
}
通过循环递增pn
值实现全量采集,建议设置随机延迟(2-5秒)避免触发频率限制。
三、核心数据解析技术
1. JSON数据提取
返回数据采用嵌套JSON结构,关键字段定位示例:
import json
response_text = '返回的JSON字符串'
data = json.loads(response_text)
# 提取企业基础信息
company_info = data['data']['result']['items'][0]
name = company_info['companyName']
legal_person = company_info['legalPersonName']
registered_capital = company_info['regCapital']
2. 复杂结构处理
股东信息采用多层嵌套:
shareholders = []
for shareholder in company_info['shareholderList']:
shareholders.append({
'name': shareholder['shareholderName'],
'type': shareholder['shareholderType'],
'ratio': shareholder['subscribedRatio']
})
法律诉讼数据需解析lawsuitList
字段,注意处理null
值情况。
3. 异常数据处理
针对爱企查返回的"---"
占位符,需建立数据清洗规则:
def clean_data(value):
if value == '---' or value is None:
return None
try:
return float(value) if '.' in str(value) else int(value)
except ValueError:
return str(value).strip()
四、反爬策略应对方案
1. IP代理池建设
推荐使用高匿名HTTP代理,检测机制如下:
import requests
def check_proxy(proxy):
try:
response = requests.get('https://aiqicha.baidu.com',
proxies={'http': proxy},
timeout=5)
return response.status_code == 200
except:
return False
建议维护500+有效代理,采用轮询+失败重试机制。
2. 行为模拟技术
使用selenium
模拟浏览器操作:
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get('https://aiqicha.baidu.com')
# 模拟搜索行为
search_box = driver.find_element(By.ID, 'search-key')
search_box.send_keys('目标企业')
driver.find_element(By.ID, 'search-button').click()
3. 验证码识别方案
针对出现的点选验证码,可采用:
- 第三方OCR服务(如百度文字识别API)
- 深度学习模型(YOLOv5目标检测)
- 手动打码平台(如超级鹰)
五、数据存储与应用
1. 结构化存储设计
MySQL表结构示例:
CREATE TABLE company_info (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
legal_person VARCHAR(50),
reg_capital DECIMAL(15,2),
est_date DATE,
status VARCHAR(20),
update_time TIMESTAMP
);
2. 大数据存储方案
对于海量数据,推荐:
- MongoDB:适合存储嵌套JSON
- Elasticsearch:支持全文检索
- ClickHouse:列式存储,适合分析查询
3. 数据分析应用
采集数据可用于:
- 企业风险评估模型构建
- 行业竞争格局分析
- 供应链关系图谱绘制
- 投资决策支持系统
六、合规与风险控制
1. 法律合规要点
2. 平台规则遵守
- 尊重robots.txt协议
- 不破解付费接口
- 避免影响平台正常运行
3. 风险应对措施
- 建立数据备份机制
- 记录完整操作日志
- 定期进行合规审查
七、进阶优化方向
1. 分布式爬虫架构
采用Scrapy-Redis实现分布式:
# settings.py配置
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
2. 增量采集策略
通过比较update_time
字段实现增量更新:
last_update = get_last_update_time() # 从数据库获取
params['updateTime'] = last_update.strftime('%Y-%m-%d')
3. 数据质量监控
建立数据校验规则:
- 注册资本字段正则校验:
^\d+(\.\d+)?(万|亿元)?$
- 统一社会信用代码校验(18位)
- 经营范围字数统计(通常>10字)
八、完整代码示例
import requests
import json
import time
from datetime import datetime
class AiqichaSpider:
def __init__(self):
self.base_url = 'https://aiqicha.baidu.com/api/search/pcsearch'
self.headers = {
'User-Agent': 'Mozilla/5.0',
'Referer': 'https://aiqicha.baidu.com/'
}
self.session = requests.Session()
def generate_sign(self, keyword):
timestamp = str(int(time.time() * 1000))
raw_str = f"aiqicha_secret_key{keyword}{timestamp}"
return hashlib.md5(raw_str.encode()).hexdigest()
def search_company(self, keyword, page=1):
params = {
'word': keyword,
'pn': page,
'rn': 20,
'sign': self.generate_sign(keyword)
}
response = self.session.get(self.base_url,
params=params,
headers=self.headers)
return response.json()
def parse_company(self, json_data):
results = []
for item in json_data['data']['result']['items']:
results.append({
'name': item['companyName'],
'legal_person': item['legalPersonName'],
'reg_capital': item['regCapital'],
'est_date': item['estDate'],
'status': item['compStatus']
})
return results
def run(self, keyword, max_pages=5):
all_data = []
for page in range(1, max_pages+1):
print(f"正在采集第{page}页...")
json_data = self.search_company(keyword, page)
if not json_data['data']['result']['items']:
break
page_data = self.parse_company(json_data)
all_data.extend(page_data)
time.sleep(3) # 礼貌性延迟
return all_data
# 使用示例
if __name__ == '__main__':
spider = AiqichaSpider()
companies = spider.run('阿里巴巴', 3)
for company in companies:
print(company)
九、总结与展望
Python爬取爱企查工商信息需综合运用反爬破解、数据解析、存储优化等技术。未来发展方向包括:
- 结合NLP技术实现企业关系图谱构建
- 开发可视化分析平台
- 对接企业征信系统
- 实现实时数据监控预警
建议开发者持续关注平台接口变更,建立完善的错误处理机制,在合规框架内发挥数据价值。通过系统化的爬虫架构设计,可实现日均10万+条数据的高效稳定采集。
发表评论
登录后可评论,请前往 登录 或 注册