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

如何使用Selenium抓取HTML页面预格式化文本并导出为CSV文件

Selenium抓取getarea站点预格式化结果导出CSV实现方案

操作全流程不需要额外依赖,用Python标准库就能完成:

  • 第一步:精准提取预格式化文本内容
    该站点返回的结果全部包裹在<pre>标签内,不需要抓取整个页面源码,直接定位pre标签拿纯文本即可,避免混入页面导航、按钮等无关内容:
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    # 加显式等待等结果加载完成,避免拿到空值
    pre_block = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.TAG_NAME, "pre"))
    )
    raw_result = pre_block.text
    
  • 第二步:拆分文本过滤无效行
    拿到的raw_result是整段带格式的字符串,先按换行拆分成单行列表,过滤掉空行:
    all_lines = [line.rstrip() for line in raw_result.splitlines() if line.strip()]
    
    第一次跑可以先打印前15-20行内容确认边界:列名行(包含Atom、Area、SD这类字段名)之前的都是查询参数说明,直接跳过;最后一行有效数据之后的是面积合计、计算说明类内容,直接跳过。
    也可以用通用规则快速筛数据行:有效数据行都是以数字(原子序号)开头,直接判断行首字符是否为数字即可,不用手动数行数。
  • 第三步:按格式拆分每行字段
    预格式化文本的列是用2个及以上的空格做分隔的,不要直接按单个空格拆分,用正则匹配多空格分割,避免列内容里的单空格导致拆分错位:
    import re
    # 匹配2个及以上连续空格作为分隔符
    split_pattern = re.compile(r'\s{2,}')
    
  • 第四步:写入CSV文件
    用Python自带的csv模块写入,不需要安装pandas等第三方库:
    import csv
    # 替换成你实际从结果里匹配到的列名
    csv_headers = ["Atom_ID", "Atom_Name", "Residue", "Residue_ID", "SASA_value", "SD"]
    with open("getarea_sasa_result.csv", "w", newline="", encoding="utf-8") as csvf:
        writer = csv.writer(csvf)
        writer.writerow(csv_headers)
        for line in all_lines:
            # 跳过非数据行
            if not line.strip()[0].isdigit():
                continue
            row_fields = split_pattern.split(line.strip())
            # 字段数和表头数一致才写入,过滤异常行
            if len(row_fields) == len(csv_headers):
                writer.writerow(row_fields)
    

调测阶段可以先把拆分后的row_fields打印出来校验,如果存在列错位,微调正则规则或者过滤条件即可,这类站点的预格式化文本列对齐非常规整,只要分隔符规则匹配正确基本不会出现错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:31:15