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

如何用Selenium+Python爬取折叠式FAQ页面并生成Pandas DataFrame

爬取折叠式FAQ并生成Pandas DataFrame解决方案

针对目标页面的折叠式FAQ结构,以下是可行的Selenium爬取方案,核心是正确定位折叠面板元素并处理展开动作:

核心定位逻辑

  1. FAQ条目容器:页面内每个FAQ项都包裹在accordion-item类的div中,用XPATH //div[@class='accordion-item']可获取所有FAQ条目。
  2. 展开触发按钮:每个FAQ的标题按钮是展开入口,相对XPATH为.//div[@class='accordion-header']/button(基于当前FAQ容器定位,避免跨条目干扰)。
  3. 内容提取路径:问题文本直接取标题按钮的内容;答案需等待面板展开后,从accordion-body类的div中提取,相对XPATH为.//div[@class='accordion-collapse show']//div[@class='accordion-body']//text()。

完整代码示例

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
import pandas as pd

# 初始化Chrome浏览器(确保ChromeDriver环境配置正确)
driver = webdriver.Chrome()
driver.get("https://internet.safaricom.co.ke/faqs/home")

# 等待页面加载完成,直到第一个FAQ项出现
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='accordion-item']")))

# 存储FAQ数据的列表
faq_data = []

# 获取所有FAQ条目
faq_items = driver.find_elements(By.XPATH, "//div[@class='accordion-item']")

for item in faq_items:
    try:
        # 等待当前FAQ的标题按钮可点击并展开
        question_btn = WebDriverWait(item, 5).until(EC.element_to_be_clickable((By.XPATH, ".//div[@class='accordion-header']/button")))
        question_btn.click()
        # 等待答案区域完全展开可见
        WebDriverWait(item, 5).until(EC.visibility_of_element_located((By.XPATH, ".//div[@class='accordion-collapse show']")))
        
        # 提取问题文本并清理格式
        question = question_btn.text.strip()
        
        # 提取答案文本,合并零散文本节点并清理多余空格
        answer_parts = item.find_elements(By.XPATH, ".//div[@class='accordion-collapse show']//div[@class='accordion-body']//text()")
        answer = " ".join([part.strip() for part in answer_parts if part.strip()])
        
        # 将当前FAQ数据加入列表
        faq_data.append({"问题": question, "答案": answer})
    except Exception as e:
        print(f"处理FAQ条目时出错: {str(e)}")
        continue

# 关闭浏览器
driver.quit()

# 转换为Pandas DataFrame
faq_df = pd.DataFrame(faq_data)
print(faq_df.head())
# 可选:保存为CSV文件
# faq_df.to_csv("safaricom_faq.csv", index=False, encoding="utf-8")

关键注意事项

  • 相对XPATH:使用.开头的相对路径,确保仅在当前FAQ条目范围内查找元素,避免跨条目定位错误。
  • 等待机制:必须依赖WebDriverWait处理动态加载,避免元素未就绪导致的定位失败或文本为空问题。
  • 异常处理:加入try-except块捕获单个条目处理异常,保证程序能继续处理后续FAQ。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:10:10