jsoup爬虫结合EasyExcel

介绍: 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、 执行结果

这只是简单的操作,其他的功能还有很多,可以阅读文档,从当初的看视频到现在喜欢自己一个人摸索文档,这可能就是一种进步了。

# 基础 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×