如何利用Python爬虫抓取企业公示系统的工商信息_处理复杂的嵌套表格与动态表单

P粉602998670

P粉602998670

2026-05-02

715人浏览

原创

直接用requests+beautifulsoup无法加载国家企业信用信息公示系统页面,因其依赖javascript动态渲染、ajax注入数据及多层iframe/折叠面板,返回的仅为骨架页。

如何利用python爬虫抓取企业公示系统的工商信息_处理复杂的嵌套表格与动态表单

为什么直接用 requests + BeautifulSoup 无法加载企业公示系统页面

国家企业信用信息公示系统(如 www.gsxt.gov.cn)绝大多数页面依赖前端 JavaScript 渲染,搜索结果页、详情页的表格数据由 AJAX 动态注入,且关键字段(如股东信息、变更记录)藏在多层 iframe 或懒加载的折叠面板中。直接请求 HTML 返回的是空容器或骨架页,BeautifulSoup 解析不到真实数据。

实操建议:

  • 必须使用带浏览器上下文的工具,推荐 playwright(比 selenium 启动快、抗检测稍强),避免用无头 Chrome 配置不当触发滑块验证
  • 禁用图片和字体加载可提速:page.set_extra_http_headers({"Accept-Encoding": "gzip"}),并设置 context.route("**/*.{png,jpg,woff,svg}", lambda route: route.abort())
  • 不要依赖固定 CSS 选择器——页面结构常变,优先用含业务语义的属性定位,例如 button[onclick*="showShareholder"]div[id$="shareholderTable"]

如何提取嵌套在折叠面板/标签页里的工商信息

企业详情页常见“股东及出资信息”“主要人员”“变更信息”等数据分属不同 DOM 片段,点击切换时仅局部刷新,原始 HTML 中不可见。若用静态解析,会漏掉 80% 以上字段。

实操建议:

  • 先触发目标面板展开:用 page.click('text=股东及出资信息'),再等对应表格出现 —— 别用固定 time.sleep(2),改用 page.wait_for_selector('table#shareholderTable', state="visible", timeout=10000)
  • 对多级嵌套表格(如“认缴出资额”列内含多个 div 堆叠),用 page.query_selector_all('table#shareholderTable tr') 逐行取,再对每行调用 .inner_text() 获取合并文本,避免因换行/空格导致字段错位
  • 注意“查看更多”按钮:有些变更记录只显示前 5 条,需循环点击 button:has-text("查看更多") 直到不可点击,每次点击后重新等待新 tr 节点插入

绕过动态表单校验与反爬参数的关键点

搜索页的 input#keyword 提交前会生成加密参数(如 searchTypecaptchaKey),且 POST 请求头含动态 X-Requested-With 和时间戳签名。硬编码表单会立刻返回 403 或跳转验证码页。

Python 3.14.2
Python 3.14.2

Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。

下载

实操建议:

  • 不手动构造 POST —— 让浏览器真实填写并提交:page.fill('#keyword', '腾讯科技(深圳)有限公司'); page.click('button:has-text("查询")')
  • 拦截并复用浏览器发出的真实请求:用 context.route("**/corp-query-**", lambda route: ...) 拦截 AJAX 接口,从 route.request.post_data_json 中提取加密字段,后续请求可复用该结构(但注意有效期通常 ≤5 分钟)
  • 绕过滑块验证成本高,优先降权处理:控制并发为 1,IP 使用住宅代理(如 luminati),每次请求间隔 ≥8 秒,Header 模拟真实用户(User-Agent 用最新 Chrome 真实值,加 Accept-Language: zh-CN,zh;q=0.9

解析结果时如何应对字段错位与缺失值

公示系统数据录入质量参差,同一字段在不同企业页可能出现在第 2 列或第 4 列;部分企业“经营范围”字段为空但 DOM 存在占位 td,导致 row.inner_text().split('\n') 错位。

实操建议:

  • 放弃按列索引取值,改用键值对映射:先取表头行 th 文本列表,构建 {'统一社会信用代码': 0, '法定代表人': 2} 字典,再对每行 td 按索引查字典赋值
  • 对空字段做防御性处理:cell.text_content().strip().replace('\u3000', ' ').replace('\n', ' ') or None,特别注意全角空格 \u3000 和换行符干扰
  • “分支机构”“对外投资”等关联表格结构完全不同,不能复用同一解析逻辑——必须为每个子模块写独立的 parse_xxx_section() 函数,靠 page.is_visible('id=branchTable') 判断是否存在再调用

最麻烦的不是技术实现,而是字段语义不稳定:今天叫“成立日期”,明天可能改成“登记日期”;“注册资本”有时带单位“万元”,有时是纯数字。业务层必须建立字段别名映射表,并留人工校验入口。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1104

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

2072

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1185

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

8819

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

1479

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

1551

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

881

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

531

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1111

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PyCharm官方快速入门指南
PyCharm官方快速入门指南

共0课时 | 0人学习

Python函数定义官方教程
Python函数定义官方教程

共0课时 | 0人学习

Python 3.14.6官方文档
Python 3.14.6官方文档

共0课时 | 0人学习