Python爬虫实战:高效抓取天眼查企业数据的全流程指南
2025.09.18 16:01浏览量:0简介:本文详细解析如何使用Python爬虫抓取天眼查企业数据,涵盖技术选型、反爬策略应对、数据解析与存储,帮助开发者实现高效数据采集。
Python爬虫实战:高效抓取天眼查企业数据的全流程指南
一、引言:天眼查数据价值与爬虫需求
天眼查作为国内领先的企业信息查询平台,汇聚了超过2亿家企业的工商信息、司法风险、经营状况等数据。对于市场调研、竞品分析、金融风控等场景,天眼查的数据具有极高的商业价值。然而,天眼查通过API接口限制高频查询,且付费会员才能获取完整数据,这促使开发者通过爬虫技术实现数据采集。
本文将系统讲解如何使用Python构建天眼查爬虫,涵盖技术选型、反爬策略应对、数据解析与存储等关键环节,帮助开发者高效、合规地获取所需数据。
二、技术选型与工具准备
1. 核心库选择
- Requests/HTTPX:用于发送HTTP请求,推荐使用HTTPX支持异步请求。
- BeautifulSoup/PyQuery:解析HTML响应,PyQuery基于jQuery语法更易用。
- Selenium/Playwright:应对动态渲染页面,Playwright支持多浏览器且性能更优。
- Scrapy框架:适合大规模爬取,内置去重、代理管理等功能。
2. 反爬策略应对工具
- 代理IP池:使用Bright Data、ScraperAPI等付费服务,或自建代理池。
- User-Agent轮换:通过
fake_useragent
库模拟不同浏览器。 - Cookie管理:使用
requests.Session()
维持会话,或手动处理登录态。
3. 数据存储方案
- 结构化数据:MySQL/PostgreSQL存储企业基础信息。
- 非结构化数据:MongoDB存储司法文书等文本数据。
- 文件存储:CSV/Excel格式用于快速导出分析。
三、天眼查爬虫实现步骤
1. 目标URL分析
以抓取企业基本信息为例,天眼查的企业详情页URL格式为:
https://www.tianyancha.com/company/{company_id}
其中company_id
可通过搜索接口获取,或直接从企业列表页解析。
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/",
"Cookie": "your_cookie_here" # 需先登录获取
}
3. 动态内容处理
天眼查部分数据通过Ajax加载,需分析网络请求:
- 方法一:直接请求数据接口
# 示例:抓取企业股东信息
api_url = "https://www.tianyancha.com/api/company/getShareholderList"
params = {
"id": company_id,
"pageSize": 10
}
response = requests.get(api_url, headers=headers, params=params)
方法二:使用Playwright渲染JS
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto(f"https://www.tianyancha.com/company/{company_id}")
# 等待特定元素加载
page.wait_for_selector(".shareholder-list")
html = page.content()
4. 数据解析示例
解析企业基本信息(使用PyQuery):
from pyquery import PyQuery as pq
def parse_company_info(html):
doc = pq(html)
company = {
"name": doc(".company-header h1").text(),
"legal_person": doc(".legalPersonName").text(),
"registered_capital": doc(".registeredCapital").text(),
"business_status": doc(".businessStatus").text(),
"phone": doc(".contact-phone").text(),
"email": doc(".contact-email").text()
}
return company
5. 反爬策略应对
- IP轮换:每10-20次请求更换代理IP
proxies = [
{"http": "http://100.100.100.100:8080"},
{"http": "http://200.200.200.200:8080"}
]
proxy = random.choice(proxies)
response = requests.get(url, headers=headers, proxies=proxy)
- 请求间隔:使用
time.sleep(random.uniform(1, 3))
随机延迟 - 验证码处理:集成第三方打码平台(如超级鹰)
四、数据存储与后续处理
1. 数据库存储
以MySQL为例,创建企业信息表:
CREATE TABLE company_info (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
legal_person VARCHAR(100),
registered_capital VARCHAR(50),
business_status VARCHAR(50),
phone VARCHAR(20),
email VARCHAR(100),
crawl_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Python插入数据:
import pymysql
def save_to_mysql(company):
conn = pymysql.connect(
host="localhost",
user="root",
password="password",
database="tianyancha"
)
try:
with conn.cursor() as cursor:
sql = """
INSERT INTO company_info
(name, legal_person, registered_capital, business_status, phone, email)
VALUES (%s, %s, %s, %s, %s, %s)
"""
cursor.execute(sql, (
company["name"],
company["legal_person"],
company["registered_capital"],
company["business_status"],
company["phone"],
company["email"]
))
conn.commit()
finally:
conn.close()
2. 数据清洗与分析
- 去重:基于企业名称或统一社会信用代码
- 标准化:统一电话、邮箱格式
分析示例:统计某行业企业注册资本分布
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_sql("SELECT * FROM company_info WHERE industry LIKE '%科技%'", conn)
df["registered_capital"] = df["registered_capital"].str.replace("万人民币", "").astype(float)
df["registered_capital"].hist(bins=20)
plt.show()
五、法律与伦理注意事项
- 遵守robots协议:检查
https://www.tianyancha.com/robots.txt
,避免抓取禁止内容。 - 限制抓取频率:建议QPS不超过1,避免对服务器造成压力。
- 数据使用合规:仅用于个人学习或合法商业分析,不得用于非法用途。
- 隐私保护:不得公开或传播涉及个人隐私的数据(如高管身份证号)。
六、优化与扩展建议
- 分布式爬取:使用Scrapy-Redis实现多节点协作。
- 增量抓取:记录已抓取企业ID,避免重复。
- 异常处理:捕获网络超时、解析错误等异常,保证爬虫稳定性。
- 可视化监控:通过Prometheus+Grafana监控爬虫运行状态。
七、总结
本文系统讲解了Python爬取天眼查数据的完整流程,从技术选型到反爬策略,再到数据存储与分析。开发者需注意合规性,通过合理设置请求间隔、使用代理IP等方式降低被封风险。实际项目中,建议先从小规模抓取测试,逐步优化代码结构。天眼查的数据价值巨大,但合法、高效地获取数据才是长期运行的关键。
发表评论
登录后可评论,请前往 登录 或 注册