logo

Python Selenium爬取T眼查企业工商历史变更信息全攻略

作者:有好多问题2025.09.18 15:59浏览量:0

简介:本文详细介绍了如何使用Python Selenium框架爬取T眼查平台的企业工商历史变更信息,包括环境准备、代码实现、反爬策略应对及数据存储方法,适合开发者和企业用户参考。

Python Selenium爬取T眼查企业工商历史变更信息全攻略

一、技术背景与需求分析

企业工商历史变更信息(如股东变更、注册资本调整、经营范围修改等)是商业决策、尽职调查和法律风险评估的重要依据。T眼查作为国内主流企业信息查询平台,提供了结构化的工商变更记录,但手动查询效率低且无法批量处理。通过Python Selenium实现自动化爬取,可解决以下痛点:

  • 效率提升:单企业查询时间从5分钟缩短至10秒
  • 数据完整性:获取全量变更记录(含变更日期、变更项、变更前后内容)
  • 批量处理:支持多企业信息自动化采集

二、技术实现方案

1. 环境准备

  1. # 基础依赖安装
  2. pip install selenium pandas fake_useragent
  3. # 浏览器驱动下载(需匹配本地浏览器版本)
  4. # Chrome驱动下载地址:https://sites.google.com/chromium.org/driver/

关键组件

  • Selenium WebDriver:控制浏览器自动化操作
  • ChromeDriver:与Chrome浏览器交互的桥梁
  • Pandas:数据清洗与存储
  • fake_useragent:生成随机User-Agent规避反爬

2. 核心代码实现

(1)浏览器初始化与反爬策略

  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.options import Options
  3. from fake_useragent import UserAgent
  4. def init_browser():
  5. ua = UserAgent()
  6. options = Options()
  7. options.add_argument(f"user-agent={ua.random}")
  8. options.add_argument("--disable-blink-features=AutomationControlled")
  9. options.add_experimental_option("excludeSwitches", ["enable-automation"])
  10. options.add_experimental_option('useAutomationExtension', False)
  11. driver = webdriver.Chrome(
  12. executable_path='./chromedriver', # 替换为实际路径
  13. options=options
  14. )
  15. driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
  16. 'source': '''
  17. Object.defineProperty(navigator, 'webdriver', {
  18. get: () => undefined
  19. })
  20. '''
  21. })
  22. return driver

反爬机制应对

  • 动态User-Agent轮换
  • 禁用自动化特征标记
  • CDP协议修改webdriver属性

(2)企业信息查询流程

  1. def search_company(driver, company_name):
  2. base_url = "https://www.tianyancha.com"
  3. driver.get(base_url)
  4. # 输入企业名称并搜索
  5. search_box = driver.find_element("xpath", '//*[@id="home-main-search"]')
  6. search_box.send_keys(company_name)
  7. search_box.submit()
  8. # 切换至企业详情页(需处理弹窗和验证码
  9. try:
  10. company_link = driver.find_element("xpath", '//div[@class="search-result-single"]/a')
  11. company_link.click()
  12. except:
  13. # 验证码处理逻辑(需接入打码平台)
  14. pass

关键点

  • XPath定位需根据T眼查实际DOM结构调整
  • 验证码建议通过第三方服务(如超级鹰)处理
  • 弹窗拦截需添加异常处理

(3)工商变更信息解析

  1. def parse_change_history(driver):
  2. change_tabs = driver.find_elements("xpath", '//div[@class="ant-tabs-tab"]')
  3. for tab in change_tabs:
  4. if "工商变更" in tab.text:
  5. tab.click()
  6. break
  7. # 等待数据加载
  8. import time
  9. time.sleep(2)
  10. changes = []
  11. change_items = driver.find_elements("xpath", '//div[@class="change-item"]')
  12. for item in change_items:
  13. date = item.find_element("xpath", './/div[@class="change-date"]').text
  14. content = item.find_element("xpath", './/div[@class="change-content"]').text
  15. changes.append({
  16. "变更日期": date,
  17. "变更内容": content
  18. })
  19. return changes

数据结构示例

  1. [
  2. {
  3. "变更日期": "2023-05-10",
  4. "变更内容": "股东变更:原股东张三退出,新增股东李四"
  5. },
  6. {
  7. "变更日期": "2022-08-15",
  8. "变更内容": "注册资本变更:从100万增至500万"
  9. }
  10. ]

3. 数据存储方案

  1. import pandas as pd
  2. def save_to_excel(changes, company_name):
  3. df = pd.DataFrame(changes)
  4. df.to_excel(f"{company_name}_工商变更记录.xlsx", index=False)
  5. print(f"数据已保存至 {company_name}_工商变更记录.xlsx")

三、进阶优化策略

1. 分布式爬取架构

  1. from multiprocessing import Pool
  2. def process_company(name):
  3. driver = init_browser()
  4. try:
  5. search_company(driver, name)
  6. changes = parse_change_history(driver)
  7. save_to_excel(changes, name)
  8. finally:
  9. driver.quit()
  10. if __name__ == "__main__":
  11. companies = ["阿里巴巴", "腾讯", "字节跳动"] # 示例企业列表
  12. with Pool(3) as p:
  13. p.map(process_company, companies)

2. 代理IP池集成

  1. from selenium.webdriver.common.proxy import Proxy, ProxyType
  2. def set_proxy(driver):
  3. proxy = Proxy({
  4. 'proxyType': ProxyType.MANUAL,
  5. 'httpProxy': '123.123.123.123:8080', # 替换为实际代理
  6. 'sslProxy': '123.123.123.123:8080'
  7. })
  8. driver.desired_capabilities['proxy'] = proxy._to_capabilities()

3. 异常重试机制

  1. from selenium.common.exceptions import TimeoutException, WebDriverException
  2. def robust_search(driver, company_name, max_retries=3):
  3. for attempt in range(max_retries):
  4. try:
  5. search_company(driver, company_name)
  6. return True
  7. except (TimeoutException, WebDriverException) as e:
  8. if attempt == max_retries - 1:
  9. raise
  10. time.sleep(5 * (attempt + 1))

四、法律合规与伦理建议

  1. 遵守robots协议:检查T眼查的/robots.txt文件,避免高频请求
  2. 数据使用限制:仅用于合法商业分析,不得用于非法用途
  3. 隐私保护:不采集个人敏感信息(如自然人股东身份证号)
  4. 频率控制:建议单IP每小时请求不超过30次

五、完整代码示例

  1. # 完整实现需整合上述模块
  2. # 推荐项目结构:
  3. # /project
  4. # ├── chromedriver.exe
  5. # ├── main.py
  6. # ├── utils.py (封装浏览器操作)
  7. # └── companies.txt (待查询企业列表)

六、总结与展望

本方案通过Selenium实现了T眼查工商变更信息的自动化采集,相比传统API接口具有以下优势:

  • 无需授权:避免API调用权限限制
  • 数据全面:获取页面完整变更记录
  • 灵活扩展:可轻松适配其他查询平台

未来优化方向:

  1. 接入深度学习模型处理验证码
  2. 开发可视化监控面板
  3. 集成自然语言处理生成变更分析报告

提示:实际部署前需进行充分测试,建议先在测试环境验证DOM结构定位的准确性,并根据目标网站更新频率定期维护XPath规则。

相关文章推荐

发表评论