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

如何提取网页源码中隐藏的data-warehouse-id属性值?

提取网页隐藏属性值与API数据抓取方案

一、解决data-warehouse-id提取失败的问题

你原代码的问题在于误用了get_text()方法——这个方法是用来提取标签的文本内容,而非获取标签属性。正确的做法是先定位到目标<div>,再读取它的data-warehouse-id属性。

修正后的BeautifulSoup代码

from urllib import request
from bs4 import BeautifulSoup

symbol = input("Enter symbol of the company: ")
url = f"https://www.screener.in/company/{symbol}/consolidated/"
response = request.urlopen(url)
page_source = response.read().decode('utf-8')
soup = BeautifulSoup(page_source, 'html.parser')

# 精准定位id为company-info的div标签
company_info_div = soup.find('div', id='company-info')
if company_info_div:
    warehouse_id = company_info_div.get('data-warehouse-id')
    print(f"Data Warehouse ID: {warehouse_id}")
else:
    print("未找到目标div标签")

用lxml XPath实现的方案

如果偏好使用XPath,也可以直接定位属性值:

from urllib import request
from lxml import etree

symbol = input("Enter symbol of the company: ")
url = f"https://www.screener.in/company/{symbol}/consolidated/"
response = request.urlopen(url)
page_source = response.read().decode('utf-8')
tree = etree.HTML(page_source)

# 通过XPath直接提取属性值
warehouse_id_list = tree.xpath('//div[@id="company-info"]/@data-warehouse-id')
if warehouse_id_list:
    print(f"Data Warehouse ID: {warehouse_id_list[0]}")
else:
    print("未找到目标属性")

二、抓取API加载的网页数据

对于依赖后端API动态加载数据的网页,有两种高效处理方式:

1. 直接调用目标API

  • 打开浏览器开发者工具(F12),切换到「网络」标签页,刷新页面
  • 筛选「XHR/Fetch」类型的请求,找到返回目标数据的API接口
  • 分析API的请求要求(如必要的请求头、Token、查询参数等)
  • 使用Python的requests库直接发送请求,解析返回的JSON数据(这种方式效率远高于页面渲染)

2. 用无头浏览器渲染页面

如果API有复杂验证逻辑,或数据需通过JS动态渲染到DOM,可使用无头浏览器(如Playwright、Selenium)模拟完整的页面加载流程,待数据渲染完成后提取内容:

from playwright.sync_api import sync_playwright

symbol = input("Enter symbol of the company: ")
url = f"https://www.screener.in/company/{symbol}/consolidated/"

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto(url)
    # 等待目标元素加载完成
    page.wait_for_selector('#company-info')
    # 获取目标属性值
    warehouse_id = page.get_attribute('#company-info', 'data-warehouse-id')
    print(f"Data Warehouse ID: {warehouse_id}")
    browser.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:20:57