Python高效爬取天眼查数据:从入门到实践指南
2025.09.18 16:01浏览量:2简介:本文详细解析如何使用Python技术栈爬取天眼查公开数据,涵盖反爬机制应对、数据解析与存储等核心环节,提供可复用的代码框架与合规使用建议。
一、爬取天眼查的合规性与前提准备
1.1 法律边界与数据合规
天眼查作为企业信息查询平台,其公开数据受《网络安全法》和《数据安全法》约束。在爬取前需明确:仅限爬取公开可访问数据(如企业基础信息、工商变更记录),禁止获取付费会员专属数据或进行高频次请求干扰服务。建议通过平台官方API获取结构化数据,若选择爬虫方式需控制请求频率(建议≤1次/秒)。
1.2 技术环境搭建
推荐使用Python 3.8+环境,核心依赖库包括:
二、天眼查反爬机制解析与应对策略
2.1 常见反爬手段
- IP限制:单IP每小时请求超过30次触发验证码
- 行为检测:通过鼠标轨迹、停留时间等识别机器人
- 数据加密:关键字段采用JSONP或自定义加密协议
- 参数签名:请求参数包含动态生成的
_token字段
2.2 突破方案
2.2.1 动态渲染处理
使用Selenium模拟浏览器行为:
from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom webdriver_manager.chrome import ChromeDriverManageroptions = Options()options.add_argument("--headless") # 无头模式options.add_argument("--disable-gpu")driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)driver.get("https://www.tianyancha.com/search?key=阿里巴巴")# 等待动态加载完成driver.implicitly_wait(10)html = driver.page_source
2.2.2 请求头伪装
构建合规的请求头:
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36","Referer": "https://www.tianyancha.com/","X-Requested-With": "XMLHttpRequest"}
2.2.3 代理IP池管理
建议使用付费代理服务(如亮数据、芝麻代理),配合轮询机制:
import requestsfrom itertools import cycleproxies = [{"http": "http://101.200.123.45:8080"},{"http": "http://102.201.124.46:8081"}]proxy_pool = cycle(proxies)def get_page(url):try:proxy = next(proxy_pool)response = requests.get(url, headers=headers, proxies=proxy, timeout=10)if response.status_code == 200:return response.textelse:return Noneexcept:return None
三、核心数据爬取实现
3.1 企业列表页抓取
以搜索”人工智能”企业为例:
def search_companies(keyword, page=1):url = f"https://www.tianyancha.com/search?key={keyword}&page={page}"html = get_page(url)if not html:return []# 使用正则提取企业ID(示例简化)import repattern = r'data-id="(\d+)"'company_ids = re.findall(pattern, html)return company_ids
3.2 企业详情页解析
使用BeautifulSoup提取关键信息:
from bs4 import BeautifulSoupdef parse_company_detail(company_id):url = f"https://www.tianyancha.com/company/{company_id}"html = get_page(url)if not html:return Nonesoup = BeautifulSoup(html, 'html.parser')# 提取企业名称name = soup.find('h1', class_='name').text.strip()# 提取法人信息legal_person = soup.find('div', class_='legalPersonName').text.strip()# 提取注册资本reg_capital = soup.find('div', class_='regCapital').text.strip()return {"name": name,"legal_person": legal_person,"reg_capital": reg_capital}
3.3 工商信息API调用(推荐方案)
天眼查官方提供结构化API,响应示例:
{"status": 200,"data": {"companyName": "阿里巴巴集团","legalPerson": "张勇","regCapital": "5000万美元","establishTime": "1999-09-09"}}
Python调用示例:
import requestsdef get_company_api(company_name):url = "https://api.tianyancha.com/services/v3/open/search"params = {"key": company_name,"pageSize": 10}headers = {"Authorization": "Bearer YOUR_API_KEY" # 需申请官方API权限}response = requests.get(url, headers=headers, params=params)return response.json()
四、数据存储与处理
4.1 MongoDB存储方案
from pymongo import MongoClientclient = MongoClient("mongodb://localhost:27017/")db = client["tianyancha"]collection = db["companies"]def save_to_mongo(data):if isinstance(data, list):collection.insert_many(data)else:collection.insert_one(data)
4.2 Pandas数据分析
import pandas as pd# 从MongoDB导出到DataFramedf = pd.DataFrame(list(collection.find()))# 注册资本数值化处理df['reg_capital_num'] = df['reg_capital'].str.extract(r'(\d+\.?\d*)').astype(float)# 按注册资本排序top_companies = df.sort_values('reg_capital_num', ascending=False).head(10)
五、进阶优化技巧
5.1 分布式爬虫架构
采用Scrapy+Redis实现分布式:
# scrapy_redis示例配置REDIS_URL = "redis://localhost:6379/0"DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"SCHEDULER = "scrapy_redis.scheduler.Scheduler"
5.2 异常处理机制
import timefrom random import uniformdef robust_request(url, max_retries=3):for attempt in range(max_retries):try:response = requests.get(url, headers=headers, timeout=15)if response.status_code == 200:return responseelif response.status_code == 429: # 请求过于频繁time.sleep(uniform(5, 10))continueexcept Exception as e:print(f"Attempt {attempt + 1} failed: {str(e)}")time.sleep(uniform(2, 5))return None
六、合规使用建议
- 频率控制:单IP请求间隔≥2秒,日请求量≤1000次
- 数据用途:仅限个人研究或内部分析,禁止商业转售
- 缓存机制:对已获取数据建立本地缓存,避免重复请求
- 异常监控:设置403/502错误报警,及时调整爬取策略
通过上述技术方案,开发者可在合规框架内高效获取天眼查公开数据。实际项目中建议优先使用官方API,对于研究性需求可采用爬虫方案,但需严格遵守robots协议和平台使用条款。

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