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

如何抓取丹佛斯PVG比例阀门页面中需点击“显示更多”的产品?

解决动态加载产品的抓取问题

你的问题出在页面最后两款产品是动态加载的——初始页面源码里只包含部分产品,剩下的需要点击“显示更多”触发AJAX请求后才会渲染到页面中,而BeautifulSoup只能解析初始的静态HTML,所以拿不到这部分内容。

下面提供两种可行的解决方案:

方法一:用Selenium模拟交互加载全部产品

Selenium可以模拟浏览器的点击操作,等待动态内容加载完成后再抓取页面源码,步骤如下:

  1. 先安装依赖:
pip install selenium

同时需要下载对应浏览器的驱动(比如Chrome的chromedriver,版本要和浏览器一致),并配置到环境变量中或者指定路径。

  1. 示例代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import time

# 初始化Chrome驱动
driver = webdriver.Chrome()
driver.get("https://www.danfoss.com/en/products/dps/valves-and-actuators/valves/pvg-proportional-valves/#tab-overview")

try:
    # 等待"显示更多"按钮可点击并点击
    show_more_btn = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "button.load-more-btn"))
    )
    show_more_btn.click()
    # 等待内容加载(根据网络情况调整等待时间)
    time.sleep(2)
    
    # 获取完整页面源码解析
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    tile_group = soup.find('div', attrs={"class":"tile-group-component product-group"})
    product_items = tile_group.find_all("li")
    
    for item in product_items:
        link = item.find('a', href=True)
        if link:
            print(link['href'])
finally:
    driver.quit()

方法二:直接调用动态加载的API接口

通过浏览器开发者工具可以找到点击“显示更多”时触发的AJAX请求,直接请求该接口获取产品数据,效率比Selenium更高:

  1. 找到API接口:
    打开浏览器的开发者工具(F12),切换到Network标签页,点击页面上的“显示更多”,筛选XHR请求,找到返回产品数据的接口URL。

  2. 示例代码:

import requests

# 替换为你找到的实际API接口URL
api_url = "https://www.danfoss.com/api/xxx/xxx"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

response = requests.get(api_url, headers=headers)
if response.status_code == 200:
    product_data = response.json()
    # 根据接口返回的JSON结构提取产品链接,需自行调整字段路径
    for product in product_data.get("items", []):
        if "url" in product:
            print(product["url"])

两种方法对比:API请求效率更高、资源占用少;Selenium更通用,适合复杂的交互场景。

内容的提问来源于stack exchange,提问作者Bar oo.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:50:37