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

如何使用Python提取网页dataLayer信息以实现机器学习页面分类?

用Python提取网页中的dataLayer信息

方法一:静态页面直接解析脚本标签

如果目标网页的dataLayer是在页面加载时直接嵌入在<script>标签里的(非动态生成),可以用requests请求页面,结合BeautifulSoup和正则表达式提取:

import requests
from bs4 import BeautifulSoup
import re
import json

# 请求页面,模拟浏览器请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
response = requests.get("目标网页URL", headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 遍历脚本标签,匹配dataLayer内容
for script in soup.find_all("script"):
    if script.string and "dataLayer" in script.string:
        # 正则提取dataLayer的JSON结构
        match = re.search(r'dataLayer\s*=\s*(\[.*?\]);', script.string, re.DOTALL)
        if match:
            data_layer_json = match.group(1)
            data_layer = json.loads(data_layer_json)
            print(data_layer)
            break

方法二:动态渲染页面用Selenium获取

如果dataLayer是通过JavaScript动态生成的(比如单页应用),需要模拟浏览器执行JS来获取window.dataLayer对象:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json

# 配置Chrome无头模式(不打开可视化窗口)
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")

# 初始化浏览器并访问页面
driver = webdriver.Chrome(options=chrome_options)
driver.get("目标网页URL")

# 执行JS获取dataLayer
data_layer = driver.execute_script("return window.dataLayer;")

# 格式化输出数据
print(json.dumps(data_layer, indent=2))

# 关闭浏览器
driver.quit()

方法三:轻量动态页面处理用Playwright

Playwright比Selenium更高效,同样支持执行JS提取dataLayer:

from playwright.sync_api import sync_playwright
import json

with sync_playwright() as p:
    # 启动无头浏览器
    browser = p.chromium.launch(headless=True)
    page = browser.new_page(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
    page.goto("目标网页URL")
    
    # 执行JS获取dataLayer
    data_layer = page.evaluate("() => window.dataLayer")
    
    print(json.dumps(data_layer, indent=2))
    browser.close()

注意事项

  • 部分网站有反爬机制,需设置合理请求头,避免IP被封禁;
  • 若dataLayer是通过dataLayer.push(...)多次推送数据,需调整正则逻辑提取所有推送内容;
  • 动态页面处理时,可添加等待逻辑(如Selenium的WebDriverWait、Playwright的page.wait_for_load_state),确保dataLayer已生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:33:30