Python高效爬取天眼查数据:从入门到实战指南
2025.09.18 16:01浏览量:1简介:本文详细解析如何使用Python爬取天眼查企业数据,涵盖反爬机制破解、数据解析、存储及法律合规要点,提供完整代码示例与实战技巧。
一、天眼查数据价值与爬取必要性
天眼查作为国内领先的企业信息查询平台,汇聚了超2亿家企业的工商信息、司法风险、经营状况等结构化数据。对于金融风控、市场调研、商业分析等领域,这些数据具有极高的商业价值。然而,天眼查官方API调用存在配额限制且部分字段需付费,促使开发者通过爬虫技术获取公开数据。
需特别注意:根据《网络安全法》第二十七条,未经授权的深度爬取可能涉及侵犯计算机信息系统罪。建议仅爬取企业公开的工商信息、司法判决等已公示数据,避免获取用户联系方式等隐私信息。
二、爬取前的技术准备
1. 环境配置
# 基础环境安装pip install requests selenium beautifulsoup4 pymongo scrapy# 浏览器驱动配置(以Chrome为例)from selenium import webdriveroptions = webdriver.ChromeOptions()options.add_argument('--headless') # 无头模式driver = webdriver.Chrome(options=options, executable_path='/path/to/chromedriver')
2. 反爬机制分析
天眼查采用多层级反爬策略:
- IP限制:单IP每小时请求超过30次触发验证码
- 行为检测:通过鼠标轨迹、点击间隔识别自动化工具
- 数据加密:关键参数如
t、sign通过JS动态生成
解决方案:
- 使用代理IP池(推荐Bright Data、ScraperAPI)
- 模拟人类操作(随机延迟、滚动事件)
- 破解加密参数(逆向分析JS代码)
三、核心爬取技术实现
1. 搜索接口破解
通过抓包分析发现,天眼查搜索采用POST请求:
import requestsimport jsondef search_company(keyword):url = "https://www.tianyancha.com/search"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)","Referer": "https://www.tianyancha.com/"}params = {"key": keyword,"pageSize": 10,"pageNum": 1}response = requests.post(url, headers=headers, data=json.dumps(params))return response.json()
2. 动态参数破解
对于加密参数_token,可通过执行JS获取:
from selenium.webdriver.common.by import Byimport execjsdef get_token(driver):# 加载天眼查页面driver.get("https://www.tianyancha.com")# 提取JS代码片段js_code = driver.find_element(By.XPATH, '//script[contains(text(), "_token")]').text# 使用PyExecJS执行ctx = execjs.compile(js_code)token = ctx.eval("getToken()")return token
3. 详情页解析
使用BeautifulSoup提取企业核心信息:
from bs4 import BeautifulSoupdef parse_company_detail(html):soup = BeautifulSoup(html, 'html.parser')data = {"name": soup.find('div', class_='company-header').find('h1').text,"legal_person": soup.select('.legalPersonName')[0].text,"registered_capital": soup.select('.registeredCapital')[0].text,"business_scope": soup.select('.businessScope')[0].text.strip()}return data
四、数据存储方案
1. MongoDB存储
from pymongo import MongoClientclient = MongoClient('mongodb://localhost:27017/')db = client['tianyancha']collection = db['companies']def save_to_mongo(data):collection.insert_one({"name": data["name"],"legal_person": data["legal_person"],"crawl_time": datetime.now()})
2. CSV导出
import csvdef save_to_csv(data_list, filename):with open(filename, 'w', newline='', encoding='utf-8') as f:writer = csv.DictWriter(f, fieldnames=data_list[0].keys())writer.writeheader()writer.writerows(data_list)
五、法律合规与风险控制
- robots协议:检查
https://www.tianyancha.com/robots.txt,遵守爬取频率限制 - 数据用途声明:在用户协议中明确数据仅用于合法商业分析
- 异常处理:
try:response = requests.get(url, timeout=10)response.raise_for_status()except requests.exceptions.RequestException as e:print(f"请求失败: {e}")# 触发IP轮换逻辑
六、进阶优化技巧
- 分布式爬取:使用Scrapy-Redis实现多节点协作
- 增量更新:通过
last_modified字段实现增量抓取 - 数据清洗:
```python
import re
def clean_capital(text):
# 处理"500万人民币"等格式match = re.search(r'(\d+\.?\d*)\s*(万|亿)?', text)if match:value = float(match.group(1))unit = match.group(2)if unit == '万':return value * 10000elif unit == '亿':return value * 100000000return None
### 七、完整案例演示```python# 综合示例:爬取指定行业企业列表def crawl_industry(industry_name, max_pages=5):all_data = []for page in range(1, max_pages+1):params = {"key": industry_name,"pageSize": 20,"pageNum": page}response = search_company(params)for item in response["data"]["items"]:company_id = item["id"]detail_url = f"https://www.tianyancha.com/company/{company_id}"# 此处应添加获取详情页的逻辑# 模拟获取的数据detail_data = {"name": item["name"],"status": item["status"]}all_data.append(detail_data)time.sleep(random.uniform(2, 5)) # 随机延迟save_to_csv(all_data, f"{industry_name}_companies.csv")
八、常见问题解决方案
验证码问题:
- 使用打码平台(如超级鹰)
- 手动输入验证码接口
数据缺失:
- 检查XPath/CSS选择器是否更新
- 对比网页源码与解析结果
性能瓶颈:
- 采用异步请求(aiohttp)
- 使用多线程(ThreadPoolExecutor)
九、总结与建议
- 合规优先:始终将法律风险控制放在首位
- 稳健架构:设计可扩展的爬虫框架,便于后期维护
- 持续监控:建立爬虫健康检查机制,及时处理反爬策略更新
建议开发者:
- 优先使用官方API获取结构化数据
- 爬取频率控制在合理范围(建议QPS<1)
- 定期备份爬取数据,防止丢失
通过本文介绍的技术方案,开发者可在遵守法律法规的前提下,高效获取天眼查的公开企业数据,为商业决策提供有力支持。实际开发中需根据具体需求调整爬取策略,并持续关注目标网站的反爬机制更新。

发表评论
登录后可评论,请前往 登录 或 注册