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

Python爬虫疑难:点击按钮后动态内容无法抓取,求多按钮组合爬取方案

问题描述

我正在使用BeautifulSoup进行网页爬取,目前仅能抓取初始页面内容。该网站包含3个列表按钮及4个其他按钮,点击任意按钮后页面会动态更新,但无法抓取更新后的内容。我需要实现爬取这3个按钮所有组合点击后页面中的表格数据。

尝试使用的代码如下:

from bs4 import BeautifulSoup
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

#pip install selenium
#dbutils.library.restartPython()

html = requests.get("xxxx").content

soup = BeautifulSoup(html, 'html.parser')

print(soup.prettify())

preco = soup.find("table", class_="ajax-overlay")

print(preco)

buttons = soup.findAll('fieldset')
print(buttons)

我还尝试了以下相同的代码:

from bs4 import BeautifulSoup
import requests
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

#pip install selenium
#dbutils.library.restartPython()

html = requests.get("xxxxx").content

soup = BeautifulSoup(html, 'html.parser')

print(soup.prettify())

preco = soup.find("table", class_="ajax-overlay")

print(preco)

buttons = soup.findAll('fieldset')
print(buttons)
解决方案

你用requests直接请求页面只能拿到初始静态HTML,动态加载的内容是浏览器执行JS后生成的,必须用Selenium模拟浏览器操作才能获取到更新后的页面。

核心思路

  1. 用Selenium启动浏览器,加载目标页面
  2. 定位3个列表按钮的所有选项,生成所有点击组合
  3. 依次点击每个组合的按钮,等待页面动态加载完成
  4. 解析当前浏览器的页面源码,提取表格数据
  5. 收集所有组合对应的表格数据

示例代码

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from itertools import product

# 配置Chrome浏览器,无头模式避免弹出窗口
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")

# 启动浏览器并打开目标页面
driver = webdriver.Chrome(options=chrome_options)
driver.get("替换为你的目标网址")

try:
    # 定位3个列表按钮的所有选项(需根据实际页面结构调整选择器)
    group1_options = driver.find_elements(By.CSS_SELECTOR, "fieldset:nth-of-type(1) option[value]")
    group2_options = driver.find_elements(By.CSS_SELECTOR, "fieldset:nth-of-type(2) option[value]")
    group3_options = driver.find_elements(By.CSS_SELECTOR, "fieldset:nth-of-type(3) option[value]")

    # 生成所有按钮组合
    all_combinations = product(group1_options, group2_options, group3_options)

    for combo in all_combinations:
        # 点击当前组合的所有选项
        for opt in combo:
            opt.click()
        
        # 等待表格加载完成,超时时间10秒
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "ajax-overlay"))
        )

        # 解析当前页面的表格数据
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        table = soup.find("table", class_="ajax-overlay")
        
        if table:
            rows = table.find_all("tr")
            print(f"当前组合的表格数据:")
            for row in rows:
                cols = row.find_all(["th", "td"])
                print([col.get_text(strip=True) for col in cols])

finally:
    # 关闭浏览器
    driver.quit()

注意事项

  • 元素定位:需要根据目标页面的实际HTML结构,调整按钮和表格的定位选择器(比如用By.XPATH、By.ID等)
  • 等待逻辑:如果页面加载较慢,可适当延长显式等待的超时时间
  • 反爬处理:部分网站可能有反爬机制,可添加自定义User-Agent、设置请求间隔等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 03:47:22