介绍: jsoup是一款Java的HTML解析器,主要用来对HTML解析。 解析出来的数据我们在通过Alibaba的开源解析excel工具EasyExcel实现导出。
jsoup和EasyExcel
(1)jsoup准备
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.3</version>
</dependency>
jsoup官网中文地址
(2)jsoup使用
我们以京东网站为例,京东的商品地址https://search.jd.com/Search?keyword=java
我们搜索java,keyword后面就是搜索的内容。
String url="https://search.jd.com/Search?keyword=java";
Document document = Jsoup.parse(new URL(url),5000);
Element elementById = document.getElementById("J_goodsList");
Elements tag = elementById.getElementsByTag("li");
for (Element element2 : Tag) {
String img=element2.getElementsByTag("img").attr("src");
String name = element2.getElementsByClass("p-name").text();
String price=element2.getElementsByClass("p-price").text();
System.out.println("图片地址:"+img);
System.out.println("名称:"+name);
System.out.println("价格:"+price);
}
- J_goodsList:我们通过开发者工具可以定位到商品内容的id。
- 商品是在一个个的li标签中,所以我们获取该标签拿到元素。
jsoup的简单使用就成功了:
(3)引入EasyExcel
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>
文档地址:
Alibaba的EasyExcel对比Apache的poi、jxl操作起来更容易,更重要的是内存泄漏问题的解决。
我们将内容写到excel中:
1、 创建实体类用于存储商品信息
@Data //get set方法
@AllArgsConstructor //有参
@NoArgsConstructor //无参
@Accessors(chain = true) //支持链式存储
@ContentRowHeight(15) //定义内容行高
@HeadRowHeight(15) //定义头行高
public class Jgoods {
@ColumnWidth(100) //定义该列的宽
@ExcelProperty("商品名") //头名称
private String name;
@ColumnWidth(120)
@ExcelProperty("图片地址")
private String img;
@ColumnWidth(20)
@ExcelProperty("价格")
private String price;
}
2、 结合jsoup
List<Jgoods> list=new ArrayList<Jgoods>();
String path="C:/Users/ASUS/Desktop/信息.xlsx";
String url="https://search.jd.com/Search?keyword=java";
Document document = Jsoup.parse(new URL(url),5000);
Element elementById = document.getElementById("J_goodsList");
Elements tag = elementById.getElementsByTag("li");
for (Element element : tag) {
//添加到Jgoods中
list.add(new Jgoods(element.getElementsByClass("p-name").text(), element.getElementsByTag("img").attr("src"),
element.getElementsByClass("p-price").text()));
}
try {
//sheet:表名称,当path不存在的时候可以帮助我们自动生成
EasyExcel.write(path, Jgoods.class).sheet("JD商品").doWrite(list);
}catch (Exception e) {
e.printStackTrace();
}
}
3、 执行结果
这只是简单的操作,其他的功能还有很多,可以阅读文档,从当初的看视频到现在喜欢自己一个人摸索文档,这可能就是一种进步了。