简而言之:在 Python 中抓取 JavaScript 表格时,通常无需使用无头浏览器。打开开发者工具,找到为表格提供数据的 JSON 接口,使用 requests进行重放,并进行分页;仅当网络请求需要签名、加密或以其他方式被严格封锁时,才退而求其次使用 Playwright。你写出了显而易见的代码。 requests.get(url),将 HTML 传递给 BeautifulSoup,从 <table>。脚本运行完毕,文件保存到磁盘,结果 CSV 却是空的。欢迎来到 JavaScript 表格的网络爬取世界——你浏览器中看到的行,在服务器实际返回的文档中并不存在。
静态表格将数据封装在初始 HTML 中。动态表格(也称为 AJAX 或 JavaScript 渲染的表格)则先发送一个近乎空白的壳体,随后页面中的脚本会调用 JSON 接口,并在加载完成后将行数据注入 DOM。如果你不执行该脚本,就看不到这些行。为了解决这个通常微不足道的问题而启动一个完整的浏览器,未免有些大材小用。
本指南将采用更简便的途径。我们将从决策流程图开始,帮助您不再纠结于该使用 requests 还是浏览器引擎,随后逐步演示如何在开发者工具中定位底层 JSON 接口,在 Python 中重现该接口(包含分页和身份验证),将其解析为结构清晰的行数据,并导出为 CSV、JSON Lines 或 SQLite 格式。Playwright 仅作为针对隐藏网络调用的网站的实际备选方案,而非默认工具。完成后,您将获得一个脚本,下个季度无需从头重写即可直接运行。




