java爬虫抓取动态网页(一个基于Java的亚马逊图书监控的简单爬虫实现的思路)
优采云 发布时间: 2021-10-15 16:20java爬虫抓取动态网页(一个基于Java的亚马逊图书监控的简单爬虫实现的思路)
前言:最近有博主买了Kindle,觉得亚马逊上的图书资源质量还不错,不时会有低价优质的图书出售,但限于亚马逊,确实有没有很好的打折提醒功能,所以每天都在看。又累了。于是,我写了一个简单的基于Java的亚马逊图书监控爬虫,只要有特价书,它就会自动发送邮件到指定邮箱。
实现思路
简单说一下实现的思路,本文只讲解思路,如果需要完整的童鞋项目请移至文末
只需封装JavaMail,就可以更轻松地阅读发送电子邮件的配置文件。它用于配置电子邮件发送和监控设置。使用 URL 类返回的 URLConnection 对象访问 网站 并捕获数据。(这里有个小技巧,如果你在访问亚马逊的时候没有在请求头中添加Accept-Encoding: gzip, deflate, br,你会在几次之内被拒绝访问(返回503),添加后说明返回数据经过GZIP压缩,此时需要使用GZIPInputStream读取,否则读取乱码)使用正则表达式对获取的数据进行分析,提取有用信息。发送通知邮件。基本上是函数核心代码
因为只截取了部分代码,内容缺失,思路清晰。
获取亚马逊信息
this.url = new URL("https://www.amazon.cn/gp/bestsellers/digital-text");
//打开一个连接
URLConnection connection = this.url.openConnection();
//设置请求头,防止被503
connection.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
connection.setRequestProperty("Accept-Encoding", "gzip, deflate, br");
connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9");
connection.setRequestProperty("Host", "www.amazon.cn");
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36");
//发起连接
connection.connect();
//获取数据,因为服务器发过来的数据经过GZIP压缩,要用对应的流进行读取
BufferedInputStream bis = new BufferedInputStream(new GZIPInputStream(connection.getInputStream()));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//读数据
while ((len = bis.read(tmp)) != -1) {
baos.write(tmp, 0, len);
}
this.rawData = new String(baos.toByteArray(), "utf8");
bis.close();
有规律地分析数据
//先用正则表达式去取单个li标签
Pattern p1 = Pattern.compile(" price ? price : oldPrice;
}
//将数据放入Map中
this.destData.put(name, new Price(price, new Date()));
}
}
完成项目
我把完整的项目放到了我的Github上,更多细节(如何配置,如何使用),有兴趣的孩子可以去加入我们!
仓库地址: