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

如何用C#/Python开源库获取网页滚动加载的全部商品?

当然可以!针对滚动加载的商品页面,不管是用Python还是C#,都能通过工具自动化完成全部商品的抓取,不用手动滚动页面。作为刚接触爬虫的新手,Selenium是最适合你的方案——它模拟真实浏览器的操作逻辑,完全复刻你手动滚动加载的行为,上手门槛极低。下面我给你分语言详细拆解实现步骤:

Python + Selenium 实现自动滚动加载

准备工作

首先得装好两个东西:

  • 安装Selenium库:在命令行运行 pip install selenium
  • 下载对应版本的ChromeDriver:要和你电脑上的Chrome浏览器版本匹配,下载后把它放到Python的安装目录或者系统环境变量能找到的地方

详细代码实现(带注释)

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

def scroll_to_load_all_items(url):
    # 配置Chrome浏览器选项(可选,比如设置无头模式,不弹出浏览器窗口)
    chrome_options = Options()
    # chrome_options.add_argument("--headless=new")  # 如果你不想看到浏览器窗口,就打开这行注释

    # 初始化浏览器驱动
    driver = webdriver.Chrome(options=chrome_options)
    driver.get(url)
    driver.implicitly_wait(10)  # 隐式等待10秒,让页面初始内容加载完成

    # 记录初始页面高度
    last_height = driver.execute_script("return document.body.scrollHeight")

    while True:
        # 执行JavaScript,滚动到页面最底部
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        
        # 等待2秒,让新内容加载完成(时间可以根据页面加载速度调整)
        time.sleep(2)

        # 获取当前页面高度
        new_height = driver.execute_script("return document.body.scrollHeight")

        # 如果页面高度不再变化,说明已经加载完所有内容,退出循环
        if new_height == last_height:
            break
        
        # 更新页面高度,继续循环
        last_height = new_height

    # 到这里,所有商品都加载完成了,开始提取商品信息
    # 这里假设商品元素的CSS选择器是".product-item",你需要根据目标网页实际情况修改
    items = driver.find_elements("css selector", ".product-item")
    product_list = []
    for item in items:
        # 提取商品名称和价格,同样要根据网页实际的元素选择器修改
        name = item.find_element("css selector", ".product-name").text
        price = item.find_element("css selector", ".product-price").text
        product_list.append({"name": name, "price": price})

    # 关闭浏览器
    driver.quit()

    return product_list

# 调用函数,传入目标网页URL
all_products = scroll_to_load_all_items("你的目标网页URL")
for product in all_products:
    print(f"商品名称:{product['name']},价格:{product['price']}")

核心逻辑说明

滚动加载的本质是:浏览器监听滚动事件,当滚动到页面底部附近时,触发AJAX请求加载新商品。Selenium通过执行window.scrollTo(0, document.body.scrollHeight)这段JavaScript,直接滚动到页面最底部,触发加载事件;然后通过对比滚动前后的页面高度,判断是否还有新内容——如果高度不变,说明所有商品都加载完了。


C# + Selenium 实现自动滚动加载

准备工作

  • 在Visual Studio中创建一个控制台项目
  • 通过NuGet安装两个包:Selenium.WebDriver 和 Selenium.WebDriver.ChromeDriver
  • 同样要确保ChromeDriver的版本和你的Chrome浏览器版本匹配(NuGet安装的ChromeDriver一般会自动匹配,但如果有问题可以手动下载替换)

详细代码实现(带注释)

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;

class Program
{
    static List<Product> ScrollToLoadAllItems(string url)
    {
        // 配置Chrome选项
        ChromeOptions options = new ChromeOptions();
        // options.AddArgument("--headless=new"); // 无头模式,可选

        // 初始化浏览器驱动
        using (IWebDriver driver = new ChromeDriver(options))
        {
            driver.Navigate().GoToUrl(url);
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);

            // 记录初始页面高度
            long lastHeight = (long)driver.ExecuteScript("return document.body.scrollHeight");

            while (true)
            {
                // 滚动到页面底部
                driver.ExecuteScript("window.scrollTo(0, document.body.scrollHeight);");

                // 等待新内容加载
                System.Threading.Thread.Sleep(2000);

                // 获取当前页面高度
                long newHeight = (long)driver.ExecuteScript("return document.body.scrollHeight");

                // 判断是否加载完成
                if (newHeight == lastHeight)
                {
                    break;
                }

                lastHeight = newHeight;
            }

            // 提取商品信息,同样要根据目标网页的实际元素选择器修改
            IReadOnlyCollection<IWebElement> items = driver.FindElements(By.CssSelector(".product-item"));
            List<Product> productList = new List<Product>();

            foreach (var item in items)
            {
                string name = item.FindElement(By.CssSelector(".product-name")).Text;
                string price = item.FindElement(By.CssSelector(".product-price")).Text;
                productList.Add(new Product { Name = name, Price = price });
            }

            return productList;
        }
    }

    static void Main(string[] args)
    {
        List<Product> allProducts = ScrollToLoadAllItems("你的目标网页URL");
        foreach (var product in allProducts)
        {
            Console.WriteLine($"商品名称:{product.Name},价格:{product.Price}");
        }
    }
}

// 定义商品类,用于存储信息
public class Product
{
    public string Name { get; set; }
    public string Price { get; set; }
}

额外优化建议(进阶)

如果你熟悉Chrome开发者工具的Network标签,可以尝试直接调用商品加载接口:

  1. 打开目标网页,打开Chrome开发者工具(F12),切换到Network标签
  2. 手动滚动页面,观察XHR/fetch请求,找到加载商品的接口(一般URL里会有"product"、"list"之类的关键词)
  3. 直接用Python的requests库或者C#的HttpClient调用这个接口,分页获取所有商品数据

这种方法比Selenium更高效,不需要模拟浏览器,但需要你能看懂接口的参数(比如页码、每页数量),适合有一定基础后尝试。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:54:12