logo

如何高效爬取天眼查企业工商信息:基于Excel公司列表的自动化实现方案

作者:c4t2025.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列),可扩展为多列(如统一社会信用代码、注册地等辅助字段)。
  • 代码示例
    1. import pandas as pd
    2. df = pd.read_excel('company_list.xlsx') # 读取Excel
    3. company_names = df['公司名称'].tolist() # 提取公司名称列表

3. 天眼查页面分析与请求构造

  • 搜索接口:天眼查搜索页URL格式为https://www.tianyancha.com/search?key={公司名称},返回企业列表页。
  • 详情页URL:从搜索结果中提取企业详情页链接(如/company/{企业ID})。
  • 关键参数
    • CookieUser-Agent:模拟浏览器行为,避免被识别为爬虫。
    • X-Requested-With:设置为XMLHttpRequest以模拟AJAX请求。

4. 反爬策略与合规性

  • 合规性声明:爬取公开数据需遵守《网络安全法》及天眼查《用户协议》,禁止高频请求、商业用途未经授权的数据二次销售。
  • 反爬应对
    • IP轮换:使用代理池(如Bright Data、ScraperAPI)分散请求来源。
    • 请求延迟:随机间隔(如time.sleep(random.uniform(1, 3)))。
    • 验证码处理:轻度反爬可通过手动输入验证码,重度反爬需结合OCR或第三方打码平台。

5. 数据解析与存储

  • 字段提取:从详情页解析关键信息(如企业名称、法人、注册资本、成立日期、经营范围等)。
  • 代码示例
    1. from parsel import Selector
    2. def parse_company_page(html):
    3. sel = Selector(text=html)
    4. name = sel.css('.company-header h1::text').get()
    5. legal_person = sel.css('.legalPersonName::text').get()
    6. # 其他字段解析...
    7. return {'name': name, 'legal_person': legal_person}
  • 数据存储:将结果保存为CSV或直接写入数据库(如MySQL、MongoDB)。

三、完整代码实现

1. 主流程代码

  1. import requests
  2. import pandas as pd
  3. import random
  4. import time
  5. from parsel import Selector
  6. def fetch_company_info(company_name):
  7. headers = {
  8. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
  9. 'Cookie': '你的Cookie值' # 需替换为实际Cookie
  10. }
  11. search_url = f'https://www.tianyancha.com/search?key={company_name}'
  12. try:
  13. response = requests.get(search_url, headers=headers, timeout=10)
  14. if response.status_code == 200:
  15. sel = Selector(text=response.text)
  16. detail_url = sel.css('.search-result-single a::attr(href)').get()
  17. if detail_url:
  18. detail_response = requests.get(f'https://www.tianyancha.com{detail_url}', headers=headers)
  19. return parse_company_page(detail_response.text)
  20. except Exception as e:
  21. print(f'Error fetching {company_name}: {e}')
  22. return None
  23. def main():
  24. df = pd.read_excel('company_list.xlsx')
  25. results = []
  26. for name in df['公司名称']:
  27. info = fetch_company_info(name)
  28. if info:
  29. results.append(info)
  30. time.sleep(random.uniform(1, 3)) # 随机延迟
  31. pd.DataFrame(results).to_csv('company_info.csv', index=False)
  32. if __name__ == '__main__':
  33. main()

2. 动态页面处理(Selenium示例)

若天眼查部分字段通过JavaScript动态加载,需使用Selenium:

  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.options import Options
  3. def fetch_with_selenium(company_name):
  4. options = Options()
  5. options.add_argument('--headless')
  6. driver = webdriver.Chrome(options=options)
  7. driver.get(f'https://www.tianyancha.com/search?key={company_name}')
  8. # 模拟点击、等待动态内容加载...
  9. driver.quit()

四、优化与扩展

  1. 多线程/异步请求:使用concurrent.futuresasyncio提升爬取速度。
  2. 数据去重:基于企业统一社会信用代码或名称去重。
  3. 错误重试机制:对失败请求自动重试(如3次)。
  4. 日志记录:记录爬取日志(如logging模块),便于排查问题。

五、风险与注意事项

  1. 法律风险:避免侵犯天眼查的数据权益,仅用于个人学习或内部研究。
  2. IP封禁:高频请求可能导致IP被封,需控制请求频率(如每秒1-2次)。
  3. 页面结构变更:定期检查天眼查HTML结构,更新解析逻辑。

六、总结

通过Python自动化脚本,结合Excel公司列表与天眼查平台,可高效实现企业工商信息的批量爬取。关键点包括:合规性、反爬策略、动态页面处理及数据存储。实际开发中需根据目标平台规则调整技术方案,确保稳定运行。

相关文章推荐

发表评论