logo

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

作者:demo2025.09.18 15:59浏览量:0

简介:本文详述如何基于Excel公司名称列表,通过编程实现天眼查平台的企业工商信息自动化爬取,涵盖技术选型、反爬策略应对及数据存储全流程。

一、项目背景与目标

企信通数据(企业信用信息)是商业决策、风险控制和市场分析的重要依据。天眼查作为国内领先的企业信息查询平台,提供了包括工商信息、法律诉讼、经营状况等在内的多维度数据。本方案针对”给定公司名称Excel列表”,设计一套自动化爬取流程,解决人工查询效率低、数据易错漏的问题,适用于金融机构风控、企业市场调研、律所尽职调查等场景。

二、技术选型与工具准备

1. 编程语言与库

  • Python:因其丰富的爬虫库(如requests、selenium)和数据处理能力(pandas)成为首选。
  • 关键库
    • requests:发送HTTP请求,处理简单页面。
    • selenium:模拟浏览器操作,应对动态加载内容。
    • pandas:读写Excel文件,处理结构化数据。
    • BeautifulSoup/lxml:解析HTML,提取目标数据。

2. 代理与反爬策略

天眼查对高频访问有严格限制,需准备:

  • IP代理池:使用付费代理服务(如亮数据、快代理)或自建代理,避免单IP被封。
  • User-Agent轮换:模拟不同浏览器访问,降低被识别风险。
  • 请求间隔:通过time.sleep()设置随机延迟(如1-3秒),模拟人工操作。

3. 开发环境

  • Python 3.8+
  • 安装依赖:pip install requests selenium pandas beautifulsoup4 lxml

三、核心流程设计

1. Excel数据读取

使用pandas读取公司名称列表,支持.xlsx.csv格式:

  1. import pandas as pd
  2. def read_company_list(file_path):
  3. df = pd.read_excel(file_path) # 或 pd.read_csv()
  4. return df['公司名称'].tolist() # 假设列名为"公司名称"

2. 搜索页访问与结果解析

天眼查搜索URL格式为:https://www.tianyancha.com/search?key={公司名称}。需处理两种情况:

  • 唯一匹配:直接跳转至企业详情页。
  • 多结果:需从搜索结果页提取正确链接。

示例代码(搜索页解析):

  1. from bs4 import BeautifulSoup
  2. import requests
  3. def get_company_url(company_name, proxy):
  4. search_url = f"https://www.tianyancha.com/search?key={company_name}"
  5. headers = {'User-Agent': 'Mozilla/5.0'}
  6. try:
  7. response = requests.get(search_url, headers=headers, proxies=proxy)
  8. soup = BeautifulSoup(response.text, 'lxml')
  9. # 假设第一个结果为正确链接(需根据实际HTML结构调整)
  10. result_link = soup.find('a', class_='name')['href']
  11. return 'https://www.tianyancha.com' + result_link
  12. except Exception as e:
  13. print(f"Error searching {company_name}: {e}")
  14. return None

3. 企业详情页爬取

企业详情页包含工商信息(如注册号、法定代表人、注册资本等),需定位关键DOM节点:

  1. def scrape_company_info(url, proxy):
  2. headers = {'User-Agent': 'Mozilla/5.0'}
  3. try:
  4. response = requests.get(url, headers=headers, proxies=proxy)
  5. soup = BeautifulSoup(response.text, 'lxml')
  6. # 示例:提取注册资本(需根据实际HTML结构调整)
  7. registered_capital = soup.find('div', class_='registeredCapital').text.strip()
  8. # 提取其他字段...
  9. return {
  10. '注册资本': registered_capital,
  11. # 其他字段...
  12. }
  13. except Exception as e:
  14. print(f"Error scraping {url}: {e}")
  15. return None

4. 动态内容处理(Selenium方案)

若页面通过JavaScript动态加载,需使用selenium

  1. from selenium import webdriver
  2. from selenium.webdriver.chrome.options import Options
  3. def selenium_scrape(url):
  4. chrome_options = Options()
  5. chrome_options.add_argument('--headless') # 无头模式
  6. driver = webdriver.Chrome(options=chrome_options)
  7. driver.get(url)
  8. # 等待页面加载(显式或隐式等待)
  9. registered_capital = driver.find_element_by_css_selector('.registeredCapital').text
  10. driver.quit()
  11. return registered_capital

四、数据存储与输出

将爬取结果存入Excel或数据库

  1. def save_to_excel(data_list, output_path):
  2. df = pd.DataFrame(data_list)
  3. df.to_excel(output_path, index=False)
  4. # 示例调用
  5. company_list = read_company_list('input.xlsx')
  6. results = []
  7. for company in company_list:
  8. url = get_company_url(company, proxy={'http': 'http://123.123.123.123:8080'})
  9. if url:
  10. info = scrape_company_info(url, proxy)
  11. if info:
  12. info['公司名称'] = company
  13. results.append(info)
  14. save_to_excel(results, 'output.xlsx')

五、反爬策略优化

  1. 代理轮换:每次请求使用不同代理。
  2. Cookie管理:登录后保存Cookie,模拟用户行为。
  3. 降低频率:设置全局请求间隔(如5秒/次)。
  4. 异常处理:捕获403502等错误,自动重试或切换代理。

六、法律与合规注意事项

  1. 遵守robots协议:检查天眼查的robots.txt,避免爬取禁止内容。
  2. 数据使用限制:仅用于合法用途,不得用于非法竞争或侵犯隐私。
  3. 频率控制:避免对天眼查服务器造成过大压力。

七、扩展与优化方向

  1. 多线程/异步爬取:使用asyncioscrapy提升效率。
  2. 数据清洗:对爬取结果进行标准化处理(如统一单位、格式)。
  3. 自动化调度:通过AirflowCelery实现定时爬取。

八、总结

本方案通过Python实现了从Excel列表读取公司名称、自动化搜索天眼查、爬取工商信息并存储的全流程。核心要点包括:

  • 技术选型(requests/selenium、pandas、代理池)。
  • 反爬策略(User-Agent轮换、请求间隔、代理)。
  • 法律合规(robots协议、数据使用限制)。

实际应用中,需根据天眼查的页面结构调整解析逻辑,并持续优化反爬策略。对于大规模爬取,建议使用分布式爬虫框架(如Scrapy-Redis)提升效率。

相关文章推荐

发表评论