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

如何程序化展开IBM Docs左侧面板开关并抓取动态页面数据?

IBM Docs左侧面板全展开及内容抓取实现思路(基于Selenium)

一、环境准备

  • 安装Selenium库:pip install selenium
  • 下载对应浏览器的WebDriver(如ChromeDriver),确保版本与浏览器匹配,并配置到系统PATH中
  • 导入核心模块:selenium.webdriver、WebDriverWait(显式等待)、expected_conditions等

二、核心实现步骤

1. 初始化浏览器并加载目标页面

  • 配置浏览器选项,降低反爬识别风险:
    options = webdriver.ChromeOptions()
    options.add_argument("--disable-blink-features=AutomationControlled")
    driver = webdriver.Chrome(options=options)
    
  • 打开目标链接,用显式等待确保左侧面板加载完成,避免后续元素定位失败:
    driver.get("https://www.ibm.com/docs/en/b2b-integrator/6.1.0")
    wait = WebDriverWait(driver, 10)
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".ibm-docs-sidebar")))
    

2. 循环展开所有左侧面板开关

  • 核心逻辑:反复查找未展开的开关元素,逐个点击,直到没有可展开项为止
  • 定位未展开开关:通过CSS选择器筛选aria-expanded="false"的开关按钮(需根据实际页面DOM调整选择器)
  • 点击细节:滚动到元素可见区域再操作,避免因元素不可见导致点击失败,每次点击后短暂等待子项加载:
    while True:
        toggles = driver.find_elements(By.CSS_SELECTOR, ".ibm-docs-sidebar__toggle[aria-expanded='false']")
        if not toggles:
            break
        for toggle in toggles:
            try:
                driver.execute_script("arguments[0].scrollIntoView();", toggle)
                toggle.click()
                time.sleep(0.5)
            except Exception as e:
                print(f"点击开关失败: {e}")
                continue
    

3. 抓取全部URL及对应内容

  • 展开所有面板后,定位左侧所有链接元素,提取href属性去重后存入列表:
    links = driver.find_elements(By.CSS_SELECTOR, ".ibm-docs-sidebar__link")
    url_list = list({link.get_attribute("href") for link in links if link.get_attribute("href")})
    
  • 遍历每个URL,加载页面后抓取标题、正文等核心内容,可将数据写入文件或数据库:
    for url in url_list:
        driver.get(url)
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".ibm-docs-content")))
        title = driver.find_element(By.CSS_SELECTOR, ".ibm-docs-title").text
        content = driver.find_element(By.CSS_SELECTOR, ".ibm-docs-content").text
        # 保存逻辑示例:写入txt文件
        with open(f"{title.replace('/', '_')}.txt", "w", encoding="utf-8") as f:
            f.write(f"URL: {url}\n\n{content}")
    

三、关键注意事项

  • 反爬规避:设置合理的等待间隔,避免高频操作;可随机添加短延迟,模拟人工操作节奏
  • 元素定位容错:页面DOM结构可能更新,需定期检查选择器是否有效,优先使用稳定的类名+属性组合定位元素
  • 资源管理:抓取完成后务必调用driver.quit()关闭浏览器,释放系统资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:03:16