ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

AI辅助Python爬虫实战:天眼查数据采集入门

2026/8/8 6:24:07 拓冰建站 浏览量
AI辅助Python爬虫实战:天眼查数据采集入门

1. 项目概述:AI辅助下的Python爬虫入门实战

去年帮一位做企业征信分析的朋友处理数据时,我意识到天眼查这类商业信息平台的数据采集需求远比想象中普遍。但传统爬虫开发需要面对反爬机制、页面解析等复杂问题,对新手极不友好。最近测试了几款AI编程助手后,发现它们能显著降低学习门槛——即使零基础用户,配合正确的工具链,也能在2小时内完成首个可用的企业信息采集脚本。

这个项目将展示如何用AI辅助工具快速构建天眼查爬虫。不同于传统教程,我们会重点利用AI实时生成代码、解释逻辑、调试错误的能力,让编程基础薄弱的用户也能理解每个环节。最终实现的脚本可以自动获取公司基本信息、股东构成、法律诉讼等关键数据,并以结构化格式存储。

关键提示:所有操作均在法律允许范围内进行,严格遵守天眼查robots.txt规定,单次采集间隔设置为5秒以上,仅用于个人学习目的

2. 环境配置与工具选型

2.1 Python环境快速搭建

对于Windows用户,推荐使用Microsoft Store直接安装Python 3.11:

  1. 打开Microsoft Store搜索"Python 3.11"
  2. 点击获取(默认会勾选"将Python添加到PATH")
  3. 安装完成后在CMD输入python --version验证

Mac用户建议通过Homebrew安装:

brew install python@3.11 echo 'export PATH="/opt/homebrew/opt/python@3.11/bin:$PATH"' >> ~/.zshrc

2.2 开发工具配置

VSCode作为首选IDE,需要安装以下扩展:

  • Python官方扩展(代码补全和调试)
  • Jupyter(交互式执行代码片段)
  • GitHub Copilot(AI辅助编程核心工具)

实测配置要点:

  • 在设置中开启"Auto Complete"和"Inline Suggest"
  • 调整Copilot的响应速度为"Balanced"(设置→Extensions→Copilot)
  • 安装后按Ctrl+Shift+P输入"Copilot: Login"完成身份验证

2.3 必备Python库安装

创建项目目录后,执行:

pip install requests beautifulsoup4 pandas fake-useragent

各库作用说明:

  • requests:网络请求核心库(比urllib更友好)
  • beautifulsoup4:HTML解析神器
  • pandas:数据清洗与导出
  • fake-useragent:生成随机请求头规避基础反爬

3. 天眼查页面结构分析

3.1 目标数据定位

以"小米科技有限责任公司"为例(公司ID:92040300710932208K),我们需要采集:

  1. 工商基本信息(注册资本、成立日期等)
  2. 主要人员(法人、股东等)
  3. 分支机构
  4. 风险信息(法律诉讼、行政处罚等)

通过浏览器开发者工具(F12)分析发现:

  • 关键数据通过异步接口加载(XHR请求)
  • 数据接口需要携带Cookie和Token认证
  • 分页数据采用动态参数加密

3.2 反爬机制破解方案

天眼查采用的多层防护包括:

  1. 请求头验证(User-Agent、Referer)
  2. 行为检测(鼠标轨迹、请求频率)
  3. 参数签名(_token等动态值)

应对策略:

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Referer': 'https://www.tianyancha.com/', 'Cookie': '你的登录Cookie' # 通过手动登录后获取 }

重要提醒:切勿使用多线程/异步请求,单次采集间隔建议5-10秒,每日采集量控制在100条以内

4. AI辅助开发实战流程

4.1 用自然语言描述需求

在VSCode中新建.py文件,直接输入注释:

# 我需要一个天眼查公司详情采集脚本,要求: # 1. 输入公司ID获取基本信息 # 2. 处理JSON格式的响应数据 # 3. 将结果保存到Excel # 4. 自动处理网络异常和反爬

Copilot会自动生成基础代码框架,我们在此基础上修改:

import requests import pandas as pd from fake_useragent import UserAgent def get_company_info(company_id): ua = UserAgent() headers = { 'User-Agent': ua.random, 'Referer': f'https://www.tianyancha.com/company/{company_id}' } url = f'https://www.tianyancha.com/api/v4/company/baseinfo?id={company_id}' try: response = requests.get(url, headers=headers, timeout=10) response.raise_for_status() return response.json()['data'] except Exception as e: print(f"Error fetching data: {e}") return None

4.2 数据解析与清洗

让AI帮助处理嵌套的JSON结构:

# 请帮我解析天眼查返回的JSON数据,提取以下字段: # 公司名称、注册资本、成立日期、统一社会信用代码 # 并转换为Pandas DataFrame格式 def parse_company_data(json_data): if not json_data: return pd.DataFrame() base_info = json_data.get('baseInfo', {}) result = { '公司名称': base_info.get('name'), '注册资本': f"{base_info.get('regCapital')} {base_info.get('regCapitalCurrency', '人民币')}", '成立日期': base_info.get('estiblishTime'), '信用代码': base_info.get('creditCode') } return pd.DataFrame([result])

4.3 异常处理增强

通过对话式交互让AI补充健壮性代码:

# 请为爬虫添加以下异常处理: # 1. 代理失败自动重试 # 2. 验证码触发时暂停操作 # 3. 数据格式错误时记录日志 RETRY_MAX = 3 PROXIES = {'http': 'http://你的代理IP:端口'} def safe_request(url, headers, retry=0): if retry >= RETRY_MAX: raise Exception("Max retries exceeded") try: response = requests.get(url, headers=headers, proxies=PROXIES, timeout=15) if '验证码' in response.text: input("请手动处理验证码后按回车继续...") return safe_request(url, headers, retry+1) return response except requests.exceptions.RequestException as e: print(f"Request failed (attempt {retry+1}): {e}") time.sleep(5 * (retry + 1)) return safe_request(url, headers, retry+1)

5. 完整脚本组装与优化

5.1 主流程实现

整合各功能模块:

import time from tqdm import tqdm # 进度条显示 def main(): company_ids = ['92040300710932208K'] # 示例公司ID all_data = [] for cid in tqdm(company_ids): raw_data = get_company_info(cid) df = parse_company_data(raw_data) if not df.empty: all_data.append(df) time.sleep(8) # 遵守爬虫礼仪 final_df = pd.concat(all_data, ignore_index=True) final_df.to_excel('tianyancha_data.xlsx', index=False) print(f"成功保存{len(all_data)}条数据")

5.2 参数调优建议

通过AI分析得到的性能优化点:

  1. 请求超时设置为10-15秒(兼顾成功率和效率)
  2. 随机延迟区间设为5-10秒(避免固定间隔被识别)
  3. 使用会话对象(Session)保持连接(降低TCP握手开销)

优化后的请求代码:

session = requests.Session() adapter = requests.adapters.HTTPAdapter( pool_connections=10, pool_maxsize=10, max_retries=3 ) session.mount('http://', adapter) session.mount('https://', adapter) def optimized_request(url): delay = random.uniform(5, 10) time.sleep(delay) return session.get(url, headers=generate_headers())

6. 常见问题与解决方案

6.1 验证码触发应对

当出现"verify.tianyancha.com"重定向时:

  1. 立即暂停程序运行
  2. 手动在浏览器完成验证码验证
  3. 更新Cookie后再继续运行
  4. 考虑使用付费代理IP(建议选择高匿住宅代理)

6.2 数据缺失处理

典型场景及解决方法:

| 问题现象 | 可能原因 | 解决方案 | |-------------------------|--------------------------|----------------------------| | 注册资本显示为null | 数据接口版本变更 | 检查API路径是否为v4最新版 | | 股东信息列表为空 | 需要调用单独接口 | 查找'/api/v4/holder'类接口 | | 返回数据包含HTML代码 | 触发反爬被重定向 | 更换UserAgent和IP |

6.3 效率提升技巧

  1. 使用concurrent.futures实现受限并发(建议线程数≤3)
  2. 优先采集必要字段,避免全量数据请求
  3. 对稳定接口使用本地缓存(示例代码):
from diskcache import Cache cache = Cache('tianyancha_cache') @cache.memoize(expire=86400) def cached_request(url): return requests.get(url).json()

7. 法律合规与数据使用

7.1 robots.txt检查

天眼查当前robots.txt关键限制:

Disallow: /search/ Disallow: /company/ Disallow: /vip/

解读说明:

  • 禁止爬取搜索功能相关页面
  • 公司详情页原则上不允许爬取
  • 实际可通过API接口获取数据(但需控制频率)

7.2 数据使用建议

合法使用边界:

  • 禁止商业性批量采集(需购买官方API)
  • 允许少量数据用于学术研究
  • 个人学习用途需删除敏感字段(如联系方式)

数据脱敏示例:

def anonymize_data(df): sensitive_cols = ['phone', 'email', 'idNumber'] for col in sensitive_cols: if col in df.columns: df[col] = 'REDACTED' return df

这个项目的核心价值在于展示AI如何降低编程学习曲线——当遇到不懂的代码时,你可以直接选中代码按Ctrl+I召唤Copilot解释;当需要新功能时,用自然语言描述就能生成可用代码框架。这种即时反馈的学习方式,让零基础用户能在解决实际问题的过程中掌握Python核心概念。