如何用Selenium提取网页空格分隔行数据并转Excel列?
解决方法:抓取空格分隔数据并导入Excel转列
我来帮你一步步搞定这个需求,结合你给出的代码片段,咱们完善并实现整个流程:
1. 抓取目标行的空格分隔数据
你已经定位到了表格和行,接下来需要精准获取到包含空格分隔内容的文本,再拆分数据。假设你要处理的是每行里的特定单元格(比如第一个单元格),可以这样完善代码:
WebElement table = driver.findElement(By.xpath(".//*[@id='schemeGridHolder']/div/div[6]/div/table")); List<WebElement> rows = table.findElements(By.tagName("tr")); List<String[]> allSplitData = new ArrayList<>(); // 存储所有行拆分后的数据 // 遍历每一行,拆分空格分隔的内容 for (WebElement row : rows) { // 获取目标单元格的文本(这里以第一个单元格为例) List<WebElement> cells = row.findElements(By.tagName("td")); if (!cells.isEmpty()) { String cellText = cells.get(0).getText().trim(); // 用正则匹配一个或多个空格拆分,避免多个空格导致空元素 String[] splitData = cellText.split("\\s+"); allSplitData.add(splitData); } } // 把拆分好的数据导入Excel exportToExcel(allSplitData);
如果是整行的文本都是空格分隔的,直接替换成row.getText().trim().split("\\s+")即可。
2. 导入Excel并转换为列
这里用常用的Apache POI库来实现Excel写入,先确保你的项目引入了依赖(Maven为例):
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>5.2.5</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.5</version> </dependency>
然后编写导出方法,把拆分后的数组按行-列的格式写入Excel:
import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; public void exportToExcel(List<String[]> allSplitData) { // 创建工作簿和工作表 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("拆分后的数据"); // 遍历所有拆分后的数据,每行对应Excel的一行,每个元素对应一列 for (int rowNum = 0; rowNum < allSplitData.size(); rowNum++) { String[] rowData = allSplitData.get(rowNum); Row excelRow = sheet.createRow(rowNum); for (int colNum = 0; colNum < rowData.length; colNum++) { Cell cell = excelRow.createCell(colNum); cell.setCellValue(rowData[colNum]); } } // 自动调整列宽,优化显示 for (int i = 0; i < allSplitData.get(0).length; i++) { sheet.autoSizeColumn(i); } // 写入本地文件 try (FileOutputStream fos = new FileOutputStream("拆分数据.xlsx")) { workbook.write(fos); System.out.println("Excel文件已成功生成!"); } catch (IOException e) { e.printStackTrace(); } finally { try { workbook.close(); } catch (IOException e) { e.printStackTrace(); } } }
小提示
- 如果遇到特殊空白字符(比如制表符、换行符),可以把拆分正则改成
split("[\\s\\t\\n]+"),兼容更多空白类型。 - 如果担心拆分出空字符串,可以在拆分后加个过滤,比如用
Arrays.stream(splitData).filter(s -> !s.isEmpty()).toArray(String[]::new)。
内容的提问来源于stack exchange,提问作者Prachi Dalvi
相关产品推荐
相关产品推荐

