Python Selenium爬取T眼查企业工商历史变更信息全攻略
2025.09.18 15:59浏览量:0简介:本文详细介绍了如何使用Python Selenium框架爬取T眼查平台的企业工商历史变更信息,包括环境准备、代码实现、反爬策略应对及数据存储方法,适合开发者和企业用户参考。
Python Selenium爬取T眼查企业工商历史变更信息全攻略
一、技术背景与需求分析
企业工商历史变更信息(如股东变更、注册资本调整、经营范围修改等)是商业决策、尽职调查和法律风险评估的重要依据。T眼查作为国内主流企业信息查询平台,提供了结构化的工商变更记录,但手动查询效率低且无法批量处理。通过Python Selenium实现自动化爬取,可解决以下痛点:
- 效率提升:单企业查询时间从5分钟缩短至10秒
- 数据完整性:获取全量变更记录(含变更日期、变更项、变更前后内容)
- 批量处理:支持多企业信息自动化采集
二、技术实现方案
1. 环境准备
# 基础依赖安装
pip install selenium pandas fake_useragent
# 浏览器驱动下载(需匹配本地浏览器版本)
# Chrome驱动下载地址:https://sites.google.com/chromium.org/driver/
关键组件:
- Selenium WebDriver:控制浏览器自动化操作
- ChromeDriver:与Chrome浏览器交互的桥梁
- Pandas:数据清洗与存储
- fake_useragent:生成随机User-Agent规避反爬
2. 核心代码实现
(1)浏览器初始化与反爬策略
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent
def init_browser():
ua = UserAgent()
options = Options()
options.add_argument(f"user-agent={ua.random}")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(
executable_path='./chromedriver', # 替换为实际路径
options=options
)
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': '''
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
'''
})
return driver
反爬机制应对:
- 动态User-Agent轮换
- 禁用自动化特征标记
- CDP协议修改webdriver属性
(2)企业信息查询流程
def search_company(driver, company_name):
base_url = "https://www.tianyancha.com"
driver.get(base_url)
# 输入企业名称并搜索
search_box = driver.find_element("xpath", '//*[@id="home-main-search"]')
search_box.send_keys(company_name)
search_box.submit()
# 切换至企业详情页(需处理弹窗和验证码)
try:
company_link = driver.find_element("xpath", '//div[@class="search-result-single"]/a')
company_link.click()
except:
# 验证码处理逻辑(需接入打码平台)
pass
关键点:
- XPath定位需根据T眼查实际DOM结构调整
- 验证码建议通过第三方服务(如超级鹰)处理
- 弹窗拦截需添加异常处理
(3)工商变更信息解析
def parse_change_history(driver):
change_tabs = driver.find_elements("xpath", '//div[@class="ant-tabs-tab"]')
for tab in change_tabs:
if "工商变更" in tab.text:
tab.click()
break
# 等待数据加载
import time
time.sleep(2)
changes = []
change_items = driver.find_elements("xpath", '//div[@class="change-item"]')
for item in change_items:
date = item.find_element("xpath", './/div[@class="change-date"]').text
content = item.find_element("xpath", './/div[@class="change-content"]').text
changes.append({
"变更日期": date,
"变更内容": content
})
return changes
数据结构示例:
[
{
"变更日期": "2023-05-10",
"变更内容": "股东变更:原股东张三退出,新增股东李四"
},
{
"变更日期": "2022-08-15",
"变更内容": "注册资本变更:从100万增至500万"
}
]
3. 数据存储方案
import pandas as pd
def save_to_excel(changes, company_name):
df = pd.DataFrame(changes)
df.to_excel(f"{company_name}_工商变更记录.xlsx", index=False)
print(f"数据已保存至 {company_name}_工商变更记录.xlsx")
三、进阶优化策略
1. 分布式爬取架构
from multiprocessing import Pool
def process_company(name):
driver = init_browser()
try:
search_company(driver, name)
changes = parse_change_history(driver)
save_to_excel(changes, name)
finally:
driver.quit()
if __name__ == "__main__":
companies = ["阿里巴巴", "腾讯", "字节跳动"] # 示例企业列表
with Pool(3) as p:
p.map(process_company, companies)
2. 代理IP池集成
from selenium.webdriver.common.proxy import Proxy, ProxyType
def set_proxy(driver):
proxy = Proxy({
'proxyType': ProxyType.MANUAL,
'httpProxy': '123.123.123.123:8080', # 替换为实际代理
'sslProxy': '123.123.123.123:8080'
})
driver.desired_capabilities['proxy'] = proxy._to_capabilities()
3. 异常重试机制
from selenium.common.exceptions import TimeoutException, WebDriverException
def robust_search(driver, company_name, max_retries=3):
for attempt in range(max_retries):
try:
search_company(driver, company_name)
return True
except (TimeoutException, WebDriverException) as e:
if attempt == max_retries - 1:
raise
time.sleep(5 * (attempt + 1))
四、法律合规与伦理建议
- 遵守robots协议:检查T眼查的
/robots.txt
文件,避免高频请求 - 数据使用限制:仅用于合法商业分析,不得用于非法用途
- 隐私保护:不采集个人敏感信息(如自然人股东身份证号)
- 频率控制:建议单IP每小时请求不超过30次
五、完整代码示例
# 完整实现需整合上述模块
# 推荐项目结构:
# /project
# ├── chromedriver.exe
# ├── main.py
# ├── utils.py (封装浏览器操作)
# └── companies.txt (待查询企业列表)
六、总结与展望
本方案通过Selenium实现了T眼查工商变更信息的自动化采集,相比传统API接口具有以下优势:
- 无需授权:避免API调用权限限制
- 数据全面:获取页面完整变更记录
- 灵活扩展:可轻松适配其他查询平台
未来优化方向:
提示:实际部署前需进行充分测试,建议先在测试环境验证DOM结构定位的准确性,并根据目标网站更新频率定期维护XPath规则。
发表评论
登录后可评论,请前往 登录 或 注册