java写爬虫获取京东售价
在互联网这个圈子,每每说起爬虫,大家总是会说起python , 但是除了python , 我们用Java也是可以完成的。最近生活比较拮据,买东西总想买凑一波打折,在现在生活中, 我们可以一家超市一家超市的跑, 然后看哪家最便宜,但习惯网购的我们,可能更多的会选择打开淘宝或者京东看看。但并不是每次都凑巧想要的东西都在打折,那我们就会不停的去刷新页面,看看有没有打折,有没有降价。
如以前几篇文章所说,人力能在电脑上完成的,计算机也一定可以帮我们完成。今天就来试一下,用java程序来帮我们进行价格的监控。
思路:
我们是通过打开浏览器,然后输入京东的官网,找到自己想要的东西,然后看价格。发现不是自己想要的价格就先放那,过段时间再来刷新一次。
那用程序来做也是这么一个思路。 打开京东的网址,然后去找到价格,看看是不是我们想要的价格。
技术选型:承接上文的maven项目,我们用Jdk10自带的HttpClient去模拟浏览器的请求。用jsoup去分析html页面(需要引入jsoup的pom依赖)。
在页面上人工获取价格的方式如下图所示:
在pom.xml的 dependencies节点下添加:
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.11.3</version> </dependency>
jdk10 HttpClient相关用法参考:
<u>https://developer.oracle.com/java/jdk-http-client</u>
实现代码如下:
public static void main(String[] args) { //我们想监控价格的商品url String url = "https://item.m.jd.com/product/5444550.html"; HttpClient client = HttpClient.newHttpClient(); //构造我们的请求 HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .build(); try { HttpResponse<byte[]> response = client.send(request, BodyHandler.asByteArray()); byte[] responseStr = response.body(); //对返回值进行解码 String str = new String(responseStr,"gbk"); //对页面的Html转换成java对象 Document doc = Jsoup.parse(str); //通过id获取到对应的元素 Elements eles =doc.select("#priceSale"); String text = eles.get(0).text(); //输出元素的值,即我们想要的价格 System.out.println(text); } catch (Exception e) { e.printStackTrace(); } }
注:因为使用到jdk10的实验室功能httpclient,所以需要在启动时加上jvm参数:
--add-modules=jdk.incubator.httpclient
程序的输出结果:
有兴趣的小伙伴可以自己试一试,以此程序为蓝本,可以扩展成一个全网比价的小程序,就可以便宜的买买买啦
欢迎大家关注公众号:java技术大本营, 质量内容号,专心写好每一篇技术文。欢迎留言一起讨论
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ThreadLocal 可能踩到的坑
背景 首先ThreadLocal 不做太多的介绍,在多线程场景下有着广泛的应用。 最近在实现OneLog方法级日志的时候,使用了 ThreadLocal 作为缓存和计数器,在调试过程中,发现有一些场景会出现数据错乱和内存溢出的问题。 详情 OneLog方法级日志使用 ThreadLocal 有两个场景,一个是将方法入参信息缓存起来,然后在方法结束之后与返回结果进行组装。另一个是作为计数器使用,保证循环方法的场景下,不会打印太多的日志。 实际使用的时候发现了问题,ThreadLocal 对象的生命周期是依赖于线程的,那么对于一个web应用来说,tomcat的线程是循环使用的,也就是说在web应用中,主线程下 ThreadLocal 对象永远不会被回收! 下面是问题复现示例代码: @Controller public class TestThrea
- 下一篇
【UGUI】 (二)--------- 小地图
在绝大多数游戏中,小地图都是极为常见的一个模块而且十分重要。在Unity里面如何制作一个地图其实也是比较简单的 一. 创建玩家与敌人 创建一个Capsule,命名为Player,代表我们的游戏玩家,创建两个Cube,分别命名为EnemyA,EnemyB,代表敌方两个NPC 二. 创建摄像机 创建摄像机,命名为Mini Cam,并置于模型上方适当位置处,X轴旋转90°产生俯视视觉效果,Project调整为Orthographic,Size根据各人具体情况来进行调整 三. 创建UI显示效果 ①在 Assets -> Create -> RenderTexture 创建一个RenderTexture,命名为MiniMap,并将其赋值给第二步创建的Mini Cam的Target Texture。 ②创建一个Raw Image,并将MiniMap赋值给RawImage的Texture,并把RawImage置于屏幕右上角,就可以看到初步效果了 ③为了更明显的显示效果,创建两个Material,一个调成蓝色,赋值给Player,另一个调成红色赋值给两个Enemy。然后给Pla...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7