如何高效爬取天眼查企业工商信息:基于Excel公司列表的自动化实现方案
2025.09.18 15:59浏览量:0简介:本文详细阐述如何通过自动化脚本,基于Excel公司名称列表在天眼查平台高效爬取企业工商信息,涵盖技术实现、合规性、反爬策略及数据处理全流程。
一、背景与需求分析
在金融风控、企业尽调、市场分析等场景中,企业工商信息(如注册资本、法人、股东、经营状态等)是核心数据源。天眼查作为主流企业信息查询平台,提供了丰富的公开数据,但手动逐条查询效率低下。通过自动化爬取,可实现批量获取目标企业信息,提升数据处理效率。
二、技术实现方案
1. 环境准备与工具选择
- 编程语言:Python(生态丰富,支持多线程、异步请求)
- 依赖库:
requests
/httpx
:HTTP请求pandas
:Excel数据处理selenium
/playwright
:动态渲染页面(如需)parsel
/lxml
:HTML解析fake_useragent
:随机User-Agent生成
- 代理IP:应对反爬机制(如需高频请求)
2. 数据输入:Excel公司列表处理
- 格式要求:Excel文件需包含单列公司名称(如
A列
),可扩展为多列(如统一社会信用代码、注册地等辅助字段)。 - 代码示例:
import pandas as pd
df = pd.read_excel('company_list.xlsx') # 读取Excel
company_names = df['公司名称'].tolist() # 提取公司名称列表
3. 天眼查页面分析与请求构造
- 搜索接口:天眼查搜索页URL格式为
https://www.tianyancha.com/search?key={公司名称}
,返回企业列表页。 - 详情页URL:从搜索结果中提取企业详情页链接(如
/company/{企业ID}
)。 - 关键参数:
Cookie
与User-Agent
:模拟浏览器行为,避免被识别为爬虫。X-Requested-With
:设置为XMLHttpRequest
以模拟AJAX请求。
4. 反爬策略与合规性
- 合规性声明:爬取公开数据需遵守《网络安全法》及天眼查《用户协议》,禁止高频请求、商业用途未经授权的数据二次销售。
- 反爬应对:
- IP轮换:使用代理池(如Bright Data、ScraperAPI)分散请求来源。
- 请求延迟:随机间隔(如
time.sleep(random.uniform(1, 3))
)。 - 验证码处理:轻度反爬可通过手动输入验证码,重度反爬需结合OCR或第三方打码平台。
5. 数据解析与存储
- 字段提取:从详情页解析关键信息(如企业名称、法人、注册资本、成立日期、经营范围等)。
- 代码示例:
from parsel import Selector
def parse_company_page(html):
sel = Selector(text=html)
name = sel.css('.company-header h1::text').get()
legal_person = sel.css('.legalPersonName::text').get()
# 其他字段解析...
return {'name': name, 'legal_person': legal_person}
- 数据存储:将结果保存为CSV或直接写入数据库(如MySQL、MongoDB)。
三、完整代码实现
1. 主流程代码
import requests
import pandas as pd
import random
import time
from parsel import Selector
def fetch_company_info(company_name):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Cookie': '你的Cookie值' # 需替换为实际Cookie
}
search_url = f'https://www.tianyancha.com/search?key={company_name}'
try:
response = requests.get(search_url, headers=headers, timeout=10)
if response.status_code == 200:
sel = Selector(text=response.text)
detail_url = sel.css('.search-result-single a::attr(href)').get()
if detail_url:
detail_response = requests.get(f'https://www.tianyancha.com{detail_url}', headers=headers)
return parse_company_page(detail_response.text)
except Exception as e:
print(f'Error fetching {company_name}: {e}')
return None
def main():
df = pd.read_excel('company_list.xlsx')
results = []
for name in df['公司名称']:
info = fetch_company_info(name)
if info:
results.append(info)
time.sleep(random.uniform(1, 3)) # 随机延迟
pd.DataFrame(results).to_csv('company_info.csv', index=False)
if __name__ == '__main__':
main()
2. 动态页面处理(Selenium示例)
若天眼查部分字段通过JavaScript动态加载,需使用Selenium:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def fetch_with_selenium(company_name):
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get(f'https://www.tianyancha.com/search?key={company_name}')
# 模拟点击、等待动态内容加载...
driver.quit()
四、优化与扩展
- 多线程/异步请求:使用
concurrent.futures
或asyncio
提升爬取速度。 - 数据去重:基于企业统一社会信用代码或名称去重。
- 错误重试机制:对失败请求自动重试(如3次)。
- 日志记录:记录爬取日志(如
logging
模块),便于排查问题。
五、风险与注意事项
- 法律风险:避免侵犯天眼查的数据权益,仅用于个人学习或内部研究。
- IP封禁:高频请求可能导致IP被封,需控制请求频率(如每秒1-2次)。
- 页面结构变更:定期检查天眼查HTML结构,更新解析逻辑。
六、总结
通过Python自动化脚本,结合Excel公司列表与天眼查平台,可高效实现企业工商信息的批量爬取。关键点包括:合规性、反爬策略、动态页面处理及数据存储。实际开发中需根据目标平台规则调整技术方案,确保稳定运行。
发表评论
登录后可评论,请前往 登录 或 注册