准备一个定时任务
准备一个运行类
将之前封装的HttpClient拿过来,放到一个utils包中
编写定时类的定时方法
我们在京东中搜索手机,可以看到URL
点击下一页,观察URL的变化
其中page这个参数,我们发现
Page=1是第一页
Page=3是第二页
Page=5是第三页
这就是页码的判断参数
我们开始编写代码
首先声明解析的初始地址
写一个循环,循环页码(8示例数据,学习为主)
在开发者工具中查看下页面结构,下面这些就是页面中的商品
可以找到sku和spu
那我们来抓取这些数据
先准备一个HttpClient
搜索页面(这个地方循环的初始值变为1,之前写错了)
解析页面
创建一个解析方法,这个方法完成页面解析
基本思路是:首先获取spu,然后根据spu获取sku
分析页面先获取这个div,id是goodsList,然后根据这个div找到子元素ul,然后找到li
所以获取代码
获取spu
获取sku
分析页面,找到ps-item
所以代码
其中sku的值
所以代码
然后我们将数据保存到数据库中
先声明Service
根据sku查询商品数据,如果存在,后续数据就不用查询解析了
设置完商品spu,继续解析商品详情url
之前我们发现这个是由sku拼接成的
代码,完成拼接
继续获取商品的图片,这个地方注意,在开发者工具和源代码中看到的不一样,所以代码要经常调试,开发者中是src而源码中是data-lazy-img,我们使用data-lazy-img
代码
其中因为图片大小的问题,需要做一个替换
这个图片很小
改成1就可以了
所以代码替换下,最后保存图片
获取商品的价格
因为价格选中不同的价格不同
我们调出开发者工具看一下,发现有新的请求
所以要重新请求,我们看一下
访问下,可以得到数据
简化下Url
代码实现,获取到Json数据
解析Json
先声明一个对象
解析数据
获取商品标题,先进入详情页获取标题
代码
这是获取完页面了,接下来分析里面的内容
所以代码
设置创建和更新时间
终于可以保存了
之前忘了补充事务注解了
调用方法
调试下程序,看是否有错误的地方
发现总是访问不到,显示页面信息
所以设置请求头消息User-Agent模拟浏览器
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0");
写错地方
可以获取数据了