如何使用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是整段带格式的字符串,先按换行拆分成单行列表,过滤掉空行:
第一次跑可以先打印前15-20行内容确认边界:列名行(包含Atom、Area、SD这类字段名)之前的都是查询参数说明,直接跳过;最后一行有效数据之后的是面积合计、计算说明类内容,直接跳过。all_lines = [line.rstrip() for line in raw_result.splitlines() if line.strip()]
也可以用通用规则快速筛数据行:有效数据行都是以数字(原子序号)开头,直接判断行首字符是否为数字即可,不用手动数行数。 - 第三步:按格式拆分每行字段
预格式化文本的列是用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
相关产品推荐
相关产品推荐

