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

网页抓取:如何自动获取Quantalys网站的typeCompo参数?

自动获取typeCompo参数的方法

要自动获取不同页面对应的typeCompo参数值,你可以通过浏览器开发者工具分析页面结构和请求逻辑,具体路径如下:

1. 查看页面内嵌的JS配置变量

打开目标页面后按F12唤起开发者工具,切换到Elements标签,在页面的<script>标签中搜索关键词(比如typeCompo、compoTypes),很多网站会把这类产品相关的配置参数以全局变量的形式内嵌在页面源码里,比如可能存在类似var availableCompoTypes = [4,5,8,10]这样的定义,直接提取这个数组即可。

2. 分析页面选项卡的HTML属性

观察页面上的组合分类选项(比如“资产类别”“行业板块”这类切换标签),右键选择“检查”查看元素属性:

  • 这些选项卡通常会绑定点击事件,触发GetCompoTableAndGraph请求,元素上可能带有data-type、data-compo这类自定义属性,存储了对应的typeCompo数值,比如<li data-typecompo="4">Actifs</li>。
  • 你可以通过爬虫解析页面HTML,提取所有这类属性值,得到当前页面可用的typeCompo数组。

3. 追踪初始化请求的返回数据

切换到开发者工具的Network标签,刷新页面后过滤XHR/Fetch请求:

  • 查看页面加载时的初始化接口(可能是和产品详情、组合配置相关的请求),这类请求的返回数据中往往包含当前产品支持的所有组合类型配置,其中就包含typeCompo的可用值列表。

代码优化建议

你可以先请求目标页面的HTML,用BeautifulSoup解析提取所需的ID_Produit和typeCompo数组,再批量请求接口:

import pandas as pd
import requests
from bs4 import BeautifulSoup
import re

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'
}

api_url = "https://www.quantalys.com/Fonds/GetCompoTableAndGraph"
target_urls = ["https://www.quantalys.com/Fonds/Composition/45865", "https://www.quantalys.com/Fonds/Composition/70616"]

for url in target_urls:
    # 请求页面HTML
    page_res = requests.get(url, headers=headers)
    soup = BeautifulSoup(page_res.text, 'html.parser')
    
    # 提取ID_Produit
    id_produit = None
    for script in soup.find_all('script'):
        if 'ID_Produit' in script.text:
            match = re.search(r'ID_Produit\s*:\s*(\d+)', script.text)
            if match:
                id_produit = match.group(1)
                break
    
    # 提取typeCompo数组
    type_compos = []
    compo_tabs = soup.select('[data-typecompo]')
    for tab in compo_tabs:
        type_compos.append(int(tab.get('data-typecompo')))
    
    # 批量请求接口
    if id_produit and type_compos:
        dfs = {}
        for compo in type_compos:
            payload = {'ID_Produit': id_produit, 'typeCompo': compo}
            data = requests.post(api_url, headers=headers, data=payload).json()
            dfs[compo] = pd.DataFrame(data['graph']['dataProvider']).rename({'x': 'date'}, axis=1).set_index('date')
        # 后续处理dfs...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:05:03