POM依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version> <!-- 请检查是否有更新的版本 -->
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.0.5</version> <!-- 请检查最新版本 -->
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
<scope>compile</scope>
</dependency>
实现代码:
package com.thesunlin.test;
import com.alibaba.excel.EasyExcel;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SimpleCrawler {
public static void main(String[] args) {
List<DemoData> demoDataList = new ArrayList<>();
for (int i = 1; i <= 98; i++) {
System.out.println("当前页码:"+i);
String url = "https://www.cphi.cn/cas-perpage-1000-page-"+i+".html";
try {
// 发送HTTP GET请求并获取Document对象
Document doc = Jsoup.connect(url).get();
// 定位包含CAS号等信息的表格(这里需要根据你的实际HTML结构来定位)
// 假设表格有一个特定的id或class,这里以class="your-table-class"为例
Elements tableRows = doc.select("#m-tab > tbody");
// 遍历表格的行并提取信息
for (Element row : tableRows) {
Elements columns1 = row.select("tr");
for (Element element : columns1) {
Elements columns = element.select("td");
if (columns.size() > 0) { // 确保行中有列
String casNo = columns.get(0).text(); // CAS号
String englishName = columns.get(1).text(); // 英文名称
String englishAlias = columns.size() > 2 ? columns.get(2).text() : ""; // 英文别名,如果存在的话
String chineseName = columns.size() > 3 ? columns.get(3).text() : ""; // 中文名称,如果存在的话
String chineseAlias = columns.size() > 4 ? columns.get(4).text() : ""; // 中文别名,如果存在的话
// 打印提取的信息
System.out.println("CAS号: " + casNo);
System.out.println("英文名称: " + englishName);
System.out.println("英文别名: " + englishAlias);
System.out.println("中文名称: " + chineseName);
System.out.println("中文别名: " + chineseAlias);
System.out.println("----------------------------------------");
demoDataList.add(new DemoData(casNo, englishName, englishAlias, chineseName, chineseAlias));
}
}
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("请求失败");
}
}
// 指定导出的文件路径
String fileName = "D:\\code\\demo.xlsx";
// 调用EasyExcel的write方法,将数据写入Excel文件
EasyExcel.write(fileName, DemoData.class)
.sheet("Sheet1") // 设置sheet名称
.doWrite(demoDataList); // 写入数据
System.out.println("Excel文件已成功导出到: " + fileName);
}
}
涉及到的类:
package com.thesunlin.test;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class DemoData {
@ExcelProperty("CAS号")
private String casNo;
@ExcelProperty("英文名称")
private String englishName;
@ExcelProperty("英文别名")
private String englishAlias;
@ExcelProperty("中文名称")
private String chineseName;
@ExcelProperty("中文别名")
private String chineseAlias;
// 其他字段...
}
Q.E.D.