结缘
–
很多年前,自己做了一个贵金属资讯类的网站,需要实时展示最新的各类型各交易所的金价、银价等,当时有提供这类数据的第三方 API
接口的服务商,需要付费,后面就百度到 Jsoup
可以抓取网页的数据,然后就找到一个大的网站照着爬了数据,自己再出表格展示在页面,省了一笔钱。
昨晚,心血来潮,想着可以写一篇文章,于是去官网复习了下,决定对贝壳找房下手了😏
Jsoup食用指南
Jsoup 是真的简单,简单到不想介绍开发流程,直接看官网就行了,十分钟搞定其API
官网有入门指南和例子,大家自己去看吧。
官网地址:jsoup.org/
干货
–
干货部分我会用项目实战的方式,详细讲解,相信通过这个实战的例子,大家都能轻松掌握该技术。
1、准备要抓取的网页
贝壳找房-深圳站-新房:sz.fang.ke.com/loupan/pg
2、新建Maven项目
3、Pom文件添加依赖
com.google.guava
guava
30.0-jre
org.projectlombok
lombok
1.18.18
org.jsoup
jsoup
1.14.3
com.alibaba
easyexcel
2.2.10
复制代码
4、创建Pojo类,用于将数据映射到excel表格中
因为最后会把从网页抓取的地址保存到excel文件中,我们使用阿里巴巴的 EasyExcel
,所以需要在Pom文件中引入依赖,并且需要创建一个Pojo类用来做导出文件的映射。
@Data
@Accessors(chain = true)
public class House {
@ExcelProperty(“楼盘名称”)
private String title;
@ExcelProperty(“访问网页”)
private String detailPageUrl;
@ExcelProperty(“楼盘图片”)
private String imageUrl;
@ExcelProperty(“所在地址”)
private String address;
@ExcelProperty(“户型”)
private String houseType;
@ExcelProperty(“房产类型”)
private String propertyType;
@ExcelProperty(“状态”)
private String status;
@ExcelProperty(“建筑面积”)
private String buildingArea;
@ExcelProperty(“总价”)
private String totalPrice;
@ExcelProperty(“单价(元/㎡(均价))”)
private String singlePrice;
@ExcelProperty(“标签”)
private String tag;
}
复制代码
5、Main方法执行业务代码
这里要注意几个点:
-
贝壳找房对于短时间同一个ip的频繁访问会触发
人机验证
,所以我们每次分页执行需要让线程休眠一段时间。 -
Jsoup
是针对html元素
进行抓取,如果贝壳网的网页有变动,该程序可能不能正常抓取数据。 -
该程序没有对楼盘的详细信息抓取,有兴趣的同学可以根据抓取到的
详情页url
做二次开发。 -
如果你要抓取的网站需要
登录信息
等特殊请求参数,Jsoup
也是支持设置的,具体参考官网API。
@SneakyThrows
public static void main(String[] args) {
AtomicInteger pageIndex = new AtomicInteger(1);
int pageSize = 10;
List dataList = Lists.newArrayList();
// 贝壳找房深圳区域网址
String beikeUrl = “https://sz.fang.ke.com”;
// 贝壳找房深圳市楼盘展示页地址
String loupanUrl = “https://sz.fang.ke.com/loupan/pg”;
// 用Jsoup抓取该地址完整网页信息
Document doc = Jsoup.connect(loupanUrl + pageIndex.get()).get();
// 网页标题
String pageTitle = doc.title();
// 分页容器
Element pageContainer = doc.select(“div.page-box”).first();
if (pageContainer == null) {
return;
}
// 楼盘总数
int totalCount = Integer.parseInt(pageContainer.attr(“data-total-count”));
// 分页执行
for (int i = 0; i < totalCount / pageSize; i++) {
log.info(“running get data, the current page is {}”, pageIndex.get());
// 贝壳网有人机认证,不能短时间频繁访问,每次翻页都让线程休眠10s
Thread.sleep(10000);
doc = Jsoup.connect(loupanUrl + pageIndex.getAndIncrement()).get();
// 获取楼盘列表的ul元素
Element list = doc.select(“ul.resblock-list-wrapper”).first();
if (list == null) {
continue;
}
// 获取楼盘列表的li元素
Elements elements = list.select(“li.resblock-list”);
elements.forEach(el -> {
// 楼盘介绍
Element introduce = el.child(0);
// 详情页面
String detailPageUrl = beikeUrl + introduce.attr(“href”);
// 楼盘图片
String imageUrl = introduce.select(“img”).attr(“data-original”);
// 楼盘详情
Element childDesc = el.select(“div.resblock-desc-wrapper”).first();
Element childName = childDesc.child(0);
// 楼盘名称
String title = childName.child(0).text();
// 楼盘在售状态
String status = childName.child(1).text();
// 产权类型
String propertyType = childName.child(2).text();
// 楼盘所在地址
String address = childDesc.child(1).text();
// 房间属性
Element room = childDesc.child(2);
// 户型
String houseType = “”;
// 户型集合
Elements houseTypeSpans = room.getElementsByTag(“span”);
if (CollectionUtils.isNotEmpty(houseTypeSpans)) {
// 剔除文案:【户型:】
houseTypeSpans.remove(0);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/cfb904f4f64478c518c86460386f5825.jpeg)
最后总结我的面试经验
2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。
另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
BAT面试经验
实战系列:Spring全家桶+Redis等
其他相关的电子书:源码+调优
面试真题:
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
[外链图片转存中…(img-Z61DuaEH-1713691813608)]
BAT面试经验
实战系列:Spring全家桶+Redis等
[外链图片转存中…(img-dY2qcaBx-1713691813608)]
其他相关的电子书:源码+调优
[外链图片转存中…(img-QrrtUl0f-1713691813608)]
面试真题:
[外链图片转存中…(img-3XXkMIHi-1713691813608)]
[外链图片转存中…(img-AwdU7g06-1713691813609)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!