引言
上一篇主要讲解的是:京东商场之前期准备(引入pom依赖、删除环境中无用的文件、修改资源配置文件、拷贝前端素材、创建测试controller、启动springboot项目、访问测试)
本篇主要讲解的是:京东商场之爬取数据(京东商场搜索请求、HTML解析器之jsoup、编写html解析工具类、解析页面所有的商品信息、图片的延迟加载、创建pojo类、提取解析工具类为方法、测试解析工具类封装的方法、页面元素获取扩展讲解)
打开京东搜索一下
输入 java 并搜索
注意下图中,真正的请求部分
你输入java,它就会发起一个搜索java的请求,它会给你响应一个html页面,页面中就会展示对应的信息。所以,通过获取请求返回的页面信息,筛选出我们想要的数据就可以了。通过jsoup技术,就可以解析页面。
注意看网址部分:https://search.jd.com/Search?keyword=java&enc=utf-8&wq=java&pvid=8238ca07b2fd4664b63d9bd491cad26d
这里面真正的请求部分是:https://search.jd.com/Search?keyword=java
我把测试一下,把真正的请求部分直接粘到网页上,看看效果一样的
导入jsoup包的依赖
通过开发工具查看页面的元素
在当前京东页面上,按F12键打开 开发者工具
在页面上点击,查看页面上的元素标签
找出的div标签,它的id=J_goodsList
编写html解析工具类
运行当前代码
从运行结果中可以看到:不同的内容,有不同的class样式。我用红框标识了
解析页面所有的商品信息
还是使用开发者工具继续操作
展开每一个li标签,它里面又有很多子元素
继续完善html解析工具类
运行当前代码
从结果中可以看出来,图片的地址没有取到,但是钱和标题取到了。
图片的延迟加载
京东网页上最开始加载的,并不是书籍真正的图片,默认加载的是统一的图片,这张图片特别小,加载速度快。你一直按F5刷新当前页面,就可以看到了。
等网页全加载完成了,再把书籍真正的图片,加载过来。
通过开发工具,重新获取图片的信息
继续完善html解析工具类
运行当前代码
这次我们把图片的信息也获取到了
创建pojo类
保存商品数据中的:标题、图片地址、价格信息
提取解析工具类为方法
测试解析工具类封装的方法
运行当前代码
页面元素获取扩展讲解
爬取数据那一块,如果页面多了个li标签,导致有些数据是空的,要在for循环里加个判断 。
打开京东,搜索java关键字,然后按F12,打开 开发者工具
比如:我要取到的el元素对应的class样式是gl-item的数据
for (Element el:elements){
if (el.attr(class).equalsIgnoreCase(gl-item)) {
String img = el.getElementsByTag(img).eq(0).attr(data-lazy-img);
String price = el.getElementsByClass(p-price).eq(0).text();
String title = el.getElementsByClass(p-name).eq(0).text();
System.out.println(img);
System.out.println(price);
System.out.println(title);
}
}
结束语
至此,Elasticsearch掰开揉碎系列的第21篇就结束了,本篇主要讲解的是:京东商场之爬取数据(京东商场搜索请求、HTML解析器之jsoup、编写html解析工具类、解析页面所有的商品信息、图片的延迟加载、创建pojo类、提取解析工具类为方法、测试解析工具类封装的方法、页面元素获取扩展讲解)
由于页面显示图片大小有限,代码一多图片显示得就偏小。还有一些兄弟们,java的基础又不好,照着我的图片打代码,可能因为手误都会出错。为了不让任何一个兄弟夭折在学习的路上,有需要本篇文章中java源代码的,就给我留言点赞吧,Elasticsearch系列也写么这多篇了,算是对我的鼓励和支持吧!留下你的邮箱,我把源代码发给你!
下一篇我给大家带来的是:京东商场之业务编写。我们依然掰开揉碎的方式去说。后续的内容更精彩,敬请期待,感谢兄弟们的关注!!!