logo

Python爬虫实战:爱企查工商信息高效采集指南

作者:很菜不狗2025.09.18 16:00浏览量:0

简介:本文详细介绍如何使用Python爬虫技术采集爱企查平台的企业工商信息,涵盖反爬策略破解、数据解析与存储方法,助力企业尽调与数据分析。

一、爱企查工商信息价值与爬取意义

爱企查作为百度旗下企业信息查询平台,整合了全国工商系统、司法信息及知识产权数据,提供企业基础信息、股东结构、法律诉讼等30+维度数据。对于金融机构进行企业尽调、市场调研机构分析行业格局、律所查询涉诉主体等场景,爱企查的实时数据具有重要参考价值。通过Python爬虫自动化采集,可实现日均万级数据量的高效获取,相比人工查询效率提升200倍以上。

二、爬虫技术架构设计

1. 请求头伪装策略

爱企查采用多重反爬机制,需构建完整的请求头:

  1. headers = {
  2. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
  3. 'Referer': 'https://aiqicha.baidu.com/',
  4. 'Cookie': '获取动态Cookie的方案详见下文'
  5. }

通过分析浏览器开发者工具的Network面板,发现需携带BDORZH_PS_PSSID等12个关键Cookie字段。建议使用selenium自动化工具先访问首页获取动态Cookie。

2. 动态参数破解

搜索接口包含tokentimestampsign等动态参数:

  • 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()

  1. ## 3. 分页数据采集
  2. 企业列表页采用Ajax加载,需构造如下参数:
  3. ```python
  4. params = {
  5. 'word': '企业名称关键词',
  6. 'pn': 1, # 页码
  7. 'rn': 20, # 每页条数
  8. 'sign': generate_sign('关键词')
  9. }

通过循环递增pn值实现全量采集,建议设置随机延迟(2-5秒)避免触发频率限制。

三、核心数据解析技术

1. JSON数据提取

返回数据采用嵌套JSON结构,关键字段定位示例:

  1. import json
  2. response_text = '返回的JSON字符串'
  3. data = json.loads(response_text)
  4. # 提取企业基础信息
  5. company_info = data['data']['result']['items'][0]
  6. name = company_info['companyName']
  7. legal_person = company_info['legalPersonName']
  8. registered_capital = company_info['regCapital']

2. 复杂结构处理

股东信息采用多层嵌套:

  1. shareholders = []
  2. for shareholder in company_info['shareholderList']:
  3. shareholders.append({
  4. 'name': shareholder['shareholderName'],
  5. 'type': shareholder['shareholderType'],
  6. 'ratio': shareholder['subscribedRatio']
  7. })

法律诉讼数据需解析lawsuitList字段,注意处理null值情况。

3. 异常数据处理

针对爱企查返回的"---"占位符,需建立数据清洗规则:

  1. def clean_data(value):
  2. if value == '---' or value is None:
  3. return None
  4. try:
  5. return float(value) if '.' in str(value) else int(value)
  6. except ValueError:
  7. return str(value).strip()

四、反爬策略应对方案

1. IP代理池建设

推荐使用高匿名HTTP代理,检测机制如下:

  1. import requests
  2. def check_proxy(proxy):
  3. try:
  4. response = requests.get('https://aiqicha.baidu.com',
  5. proxies={'http': proxy},
  6. timeout=5)
  7. return response.status_code == 200
  8. except:
  9. return False

建议维护500+有效代理,采用轮询+失败重试机制。

2. 行为模拟技术

使用selenium模拟浏览器操作:

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. driver = webdriver.Chrome()
  4. driver.get('https://aiqicha.baidu.com')
  5. # 模拟搜索行为
  6. search_box = driver.find_element(By.ID, 'search-key')
  7. search_box.send_keys('目标企业')
  8. driver.find_element(By.ID, 'search-button').click()

3. 验证码识别方案

针对出现的点选验证码,可采用:

  • 第三方OCR服务(如百度文字识别API)
  • 深度学习模型(YOLOv5目标检测)
  • 手动打码平台(如超级鹰)

五、数据存储与应用

1. 结构化存储设计

MySQL表结构示例:

  1. CREATE TABLE company_info (
  2. id INT AUTO_INCREMENT PRIMARY KEY,
  3. name VARCHAR(100) NOT NULL,
  4. legal_person VARCHAR(50),
  5. reg_capital DECIMAL(15,2),
  6. est_date DATE,
  7. status VARCHAR(20),
  8. update_time TIMESTAMP
  9. );

2. 大数据存储方案

对于海量数据,推荐:

  • MongoDB:适合存储嵌套JSON
  • Elasticsearch:支持全文检索
  • ClickHouse:列式存储,适合分析查询

3. 数据分析应用

采集数据可用于:

  • 企业风险评估模型构建
  • 行业竞争格局分析
  • 供应链关系图谱绘制
  • 投资决策支持系统

六、合规与风险控制

1. 法律合规要点

  • 遵守《网络安全法》第12条
  • 不得用于非法用途(如诈骗、恶意竞争)
  • 控制采集频率(建议QPS<2)

2. 平台规则遵守

  • 尊重robots.txt协议
  • 不破解付费接口
  • 避免影响平台正常运行

3. 风险应对措施

  • 建立数据备份机制
  • 记录完整操作日志
  • 定期进行合规审查

七、进阶优化方向

1. 分布式爬虫架构

采用Scrapy-Redis实现分布式:

  1. # settings.py配置
  2. DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
  3. SCHEDULER = "scrapy_redis.scheduler.Scheduler"

2. 增量采集策略

通过比较update_time字段实现增量更新:

  1. last_update = get_last_update_time() # 从数据库获取
  2. params['updateTime'] = last_update.strftime('%Y-%m-%d')

3. 数据质量监控

建立数据校验规则:

  • 注册资本字段正则校验:^\d+(\.\d+)?(万|亿元)?$
  • 统一社会信用代码校验(18位)
  • 经营范围字数统计(通常>10字)

八、完整代码示例

  1. import requests
  2. import json
  3. import time
  4. from datetime import datetime
  5. class AiqichaSpider:
  6. def __init__(self):
  7. self.base_url = 'https://aiqicha.baidu.com/api/search/pcsearch'
  8. self.headers = {
  9. 'User-Agent': 'Mozilla/5.0',
  10. 'Referer': 'https://aiqicha.baidu.com/'
  11. }
  12. self.session = requests.Session()
  13. def generate_sign(self, keyword):
  14. timestamp = str(int(time.time() * 1000))
  15. raw_str = f"aiqicha_secret_key{keyword}{timestamp}"
  16. return hashlib.md5(raw_str.encode()).hexdigest()
  17. def search_company(self, keyword, page=1):
  18. params = {
  19. 'word': keyword,
  20. 'pn': page,
  21. 'rn': 20,
  22. 'sign': self.generate_sign(keyword)
  23. }
  24. response = self.session.get(self.base_url,
  25. params=params,
  26. headers=self.headers)
  27. return response.json()
  28. def parse_company(self, json_data):
  29. results = []
  30. for item in json_data['data']['result']['items']:
  31. results.append({
  32. 'name': item['companyName'],
  33. 'legal_person': item['legalPersonName'],
  34. 'reg_capital': item['regCapital'],
  35. 'est_date': item['estDate'],
  36. 'status': item['compStatus']
  37. })
  38. return results
  39. def run(self, keyword, max_pages=5):
  40. all_data = []
  41. for page in range(1, max_pages+1):
  42. print(f"正在采集第{page}页...")
  43. json_data = self.search_company(keyword, page)
  44. if not json_data['data']['result']['items']:
  45. break
  46. page_data = self.parse_company(json_data)
  47. all_data.extend(page_data)
  48. time.sleep(3) # 礼貌性延迟
  49. return all_data
  50. # 使用示例
  51. if __name__ == '__main__':
  52. spider = AiqichaSpider()
  53. companies = spider.run('阿里巴巴', 3)
  54. for company in companies:
  55. print(company)

九、总结与展望

Python爬取爱企查工商信息需综合运用反爬破解、数据解析、存储优化等技术。未来发展方向包括:

  1. 结合NLP技术实现企业关系图谱构建
  2. 开发可视化分析平台
  3. 对接企业征信系统
  4. 实现实时数据监控预警

建议开发者持续关注平台接口变更,建立完善的错误处理机制,在合规框架内发挥数据价值。通过系统化的爬虫架构设计,可实现日均10万+条数据的高效稳定采集。

相关文章推荐

发表评论