You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法爬取JS动态加载数据的网站,求非Selenium解决方案

可行爬取方案

方案1:提取页面预加载的JSON数据

很多单页应用会把初始渲染所需的数据嵌入到HTML的<script>标签中(比如window.__INITIAL_STATE__、window.__NEXT_DATA__这类变量),你可以尝试:

  • 用requests获取原始HTML文档
  • 用正则表达式匹配包含目标数据的script内容
  • 提取JSON字符串并解析成Python字典

示例代码:

import requests
import re
import json

url = "https://app.microacquire.com/startup/BoHpuALvJmNoNWkXY8qtxVMwTyO2/sy8mcXmDyu4LGyXADT11"
response = requests.get(url)
# 匹配可能的预加载数据,需根据实际页面源码调整正则
match = re.search(r'window\.__INITIAL_STATE__ = (.*?);\s*</script>', response.text, re.DOTALL)
if match:
    raw_data = match.group(1)
    data = json.loads(raw_data)
    # 此处处理解析后的数据
    print(data)

提示:打开页面源码,搜索root附近的script标签,确认数据存储的变量名,再调整正则表达式。

方案2:使用Playwright无头模式

Playwright是轻量级自动化工具,支持无头浏览器模式,部署到AWS(Lambda/EC2)的复杂度低于Selenium:

  • 安装依赖:pip install playwright,再运行playwright install chromium(可在部署脚本中自动执行)
  • 用无头模式加载页面,等待JS渲染完成后提取内容

示例代码:

from playwright.sync_api import sync_playwright

url = "https://app.microacquire.com/startup/BoHpuALvJmNoNWkXY8qtxVMwTyO2/sy8mcXmDyu4LGyXADT11"
with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto(url, wait_until="networkidle")  # 等待网络空闲确保数据加载完成
    root_content = page.inner_html("#root")
    # 也可直接提取特定元素内容,比如startup名称:page.text_content(".startup-name-selector")
    browser.close()
    print(root_content)

AWS部署提示:可使用Playwright官方Docker镜像,或在Lambda中使用预构建的Playwright层,避免手动安装浏览器依赖。

方案3:使用Pyppeteer

Pyppeteer是Python版的Puppeteer,基于Chrome DevTools协议,支持无头模式,适合轻量JS渲染页面爬取:

  • 安装依赖:pip install pyppeteer
  • 代码示例:
import asyncio
from pyppeteer import launch

async def scrape_page():
    url = "https://app.microacquire.com/startup/BoHpuALvJmNoNWkXY8qtxVMwTyO2/sy8mcXmDyu4LGyXADT11"
    browser = await launch(headless=True)
    page = await browser.newPage()
    await page.goto(url, waitUntil="networkidle2")
    root_content = await page.querySelectorEval("#root", "(element) => element.innerHTML")
    await browser.close()
    print(root_content)

asyncio.get_event_loop().run_until_complete(scrape_page())

内容的提问来源于stack exchange,提问作者saharsh solanki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:15:39