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.


如人饮水、冷暖自知