时间:2023-1-21 作者:老大夫 分类: 传智JAVA爬虫学习笔记
package cn.itcast.jd.task;
import cn.itcast.jd.pojo.Item;
import cn.itcast.jd.service.ItemService;
import cn.itcast.jd.util.HttpUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component
public class ItemTask {
@Autowired
private HttpUtils httpUtils;
@Autowired
private ItemService itemService;
//当下在任务完成后,间隔多长时间进行性下一次的任务
@Scheduled(fixedDelay = 100*1000)
public void IteamTask()throws Exception{
//声明需要解析的初始地址
String url ="https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA&suggest=1.his.0.0&wq=%E6%89%8B%E6%9C%BA&pvid=35f2421906a34cf3b78de4ab68050965&s=56&click=0&page=";
//按照页面对手机的搜索结果进行遍历
for (int i = 1; i < 10; i=i+2) {
String html = httpUtils.doGetHtml(url + i);
//使用解析页面获取商品数据并存储
this.parse(html);
}
System.out.println("手机数据抓取完成! ");
}
//使用解析页面获取商品数据并存储
private void parse(String html) {
//解析html获取Document对象
Document doc = Jsoup.parse(html);
//获取spu
Elements spuEles = doc.select("div#J_goodsList > ul > li");
for (Element spuEle : spuEles) {
//如果spu为空就跳过,进入下一次循环
if( spuEle.attr("data-spu") == null || spuEle.attr("data-spu") == "" ){
continue;
}
//获取spu
long spu = Long.parseLong(spuEle.attr("data-spu"));
//获取sku信息
Elements skuEles = spuEle.select("li.ps-item");
for (Element skuEle : skuEles) {
//获取sku
long sku = Long.parseLong(skuEle.select("[data-sku]").attr("data-sku"));
//根据sku查询商品数据
Item item= new Item();
item.setSku(sku);
List<Item> list = this.itemService.findAll(item);
if(list.size()>0){
//如果商品存在就进行下一个循环,该商品不保存,因为已经存在
continue;
}
//设置商品的spu
item.setSpu(spu);
//设置商品的详情url
String itemUrl = "https://item.jd.com/"+sku+".html";
item.setUrl(itemUrl);
//获取商品的图片
String picUrl ="https:" + skuEle.select("img[data-sku]").first().attr("data-lazy-img");
picUrl = picUrl.replace("/n7/","/n1/");
//下载图片
String picName = this.httpUtils.doGetImage(picUrl);
// item.setPic();
//
// //获取商品的价格
// item.setPrice();
//
// //获取商品的标题
// item.setTitle();
item.setCreated(new Date());
item.setUpdated(item.getCreated());
}
}
}
}
推荐阅读: