1.依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
2.工具类
解析网页,拿到数据,放到list集合里面
public List<Content> parseJD(String keyword) throws IOException {
List<Content> contentList = new ArrayList<>();
//获得请求
String url = "https://search.xx.com/Search?keyword="+keyword;
//解析地址,如果30s内解析不到就会报错
// jsoup返回的 document 对象就是 js浏览器里面的document对象
Document parse = Jsoup.parse(new URL(url), 30000);
//先获取id=J_goodsList的大的一个商品div
Element elementById = parse.getElementById("J_goodsList");
//再获取包含一个个商品的li标签
Elements li = elementById.getElementsByTag("li");
//循环这个li,这里的li包含的就是一个个商品,商品有价格,名称,店铺名,图片地址等等
for (Element element : li) {
//为了用户体验,一般大厂的网页图片都懒加载,刚开始只会加载一个默认图片,正在的图片地址在这个data-lazy-img 里面,而不是在src里面
String img = element.getElementsByTag("img").eq(0).attr("data-lazy-img");
String price = element.getElementsByClass("p-price").eq(0).text();
String name = element.getElementsByClass("p-name").eq(0).text();
String shop = element.getElementsByClass("p-shopnum").eq(0).text();
Content content = new Content();
content.setImg(img);
content.setPrice(price);
content.setTitle(name);
content.setShop(shop);
contentList.add(content);
}
return contentList;
}
3.相关实体类
@Data
public class Content {
//myBatis-plus 的id自增
@TableId(type = IdType.AUTO)
private Integer id;
private String title;
private String price;
private String img;
private String shop;
}