Python高效爬取天眼查数据:从入门到实战指南
2025.09.18 16:01浏览量:0简介:本文详细解析如何使用Python爬取天眼查企业数据,涵盖反爬机制破解、数据解析、存储及法律合规要点,提供完整代码示例与实战技巧。
一、天眼查数据价值与爬取必要性
天眼查作为国内领先的企业信息查询平台,汇聚了超2亿家企业的工商信息、司法风险、经营状况等结构化数据。对于金融风控、市场调研、商业分析等领域,这些数据具有极高的商业价值。然而,天眼查官方API调用存在配额限制且部分字段需付费,促使开发者通过爬虫技术获取公开数据。
需特别注意:根据《网络安全法》第二十七条,未经授权的深度爬取可能涉及侵犯计算机信息系统罪。建议仅爬取企业公开的工商信息、司法判决等已公示数据,避免获取用户联系方式等隐私信息。
二、爬取前的技术准备
1. 环境配置
# 基础环境安装
pip install requests selenium beautifulsoup4 pymongo scrapy
# 浏览器驱动配置(以Chrome为例)
from selenium import webdriver
options = 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 requests
import json
def 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 By
import execjs
def 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 BeautifulSoup
def 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 MongoClient
client = 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 csv
def 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 * 10000
elif unit == '亿':
return value * 100000000
return 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)
- 定期备份爬取数据,防止丢失
通过本文介绍的技术方案,开发者可在遵守法律法规的前提下,高效获取天眼查的公开企业数据,为商业决策提供有力支持。实际开发中需根据具体需求调整爬取策略,并持续关注目标网站的反爬机制更新。
发表评论
登录后可评论,请前往 登录 或 注册