主要框架为springboot+mybatis+jsoup

jsoup官方文档:https://www.open-open.com/jsoup/

爬取的豆瓣网址为:https://www.douban.com/group/tianhezufang/discussion?start=0

1.首先对网页F12进行节点分析

2.分析得到id为group-new-topic-bar下的tbody下的tr就是我们要的每一行租房信息

3.遍历每一个tr节点,得到详细信息的url,进入到该url里获取到帖子的详细信息

4.防止爬取过于频繁,可以在每次爬取详情信息时sleep一会

代码如下:

@Override
@Transactional
public Result doubanzufang(DouBanGroup douBanGroup){try{int pageStrat = 0;String url = douBanGroup.getUrl().replace("{pageStart}",pageStrat+"");Map<String, String> heards = new HashMap<>();heards.put("Cookie", "bid=yeV9XIiyQ8w; douban-fav-remind=1; viewed=\"25971624\"; gr_user_id=dcf5e665-be30-4060-8ef6-b46949651977; _vwo_uuid_v2=D4FE434D653C82EE6B424B779E66ED8A6|5a140e4d6500abf642237676628ea9a7; ll=\"118281\"; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1585016248%2C%22https%3A%2F%2Fblog.csdn.net%2Fweixin_42211601%2Farticle%2Fdetails%2F95076934%22%5D; _pk_ses.100001.8cb4=*; __utma=30149280.1992864926.1576061677.1584599272.1585016249.15; __utmc=30149280; __utmz=30149280.1585016249.15.15.utmcsr=blog.csdn.net|utmccn=(referral)|utmcmd=referral|utmcct=/weixin_42211601/article/details/95076934; ct=y; ap_v=0,6.0; __utmt=1; _pk_id.100001.8cb4=d343c8a5a42b363f.1576061677.12.1585017177.1584599339.; __utmb=30149280.119.5.1585017177273");heards.put("Host", "www.douban.com");heards.put("Referer", "https://www.douban.com/group/longgangzufang/discussion?start=25");heards.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36");Document document = Jsoup.connect(url).headers(heards).timeout(10000).ignoreContentType(true).get();Element content = document.getElementById("content");Elements olt = content.select("table.olt");Elements tbody = olt.select("tbody");Elements tr = tbody.select("tr");Elements title = tr.select(".title");Elements time = tr.select(".time");Elements a = title.select("a");List<Map<String,Object>> list = new ArrayList<>();// 获取信息for (int i = 0; i < a.size(); i++) {Map<String,Object> map = new HashMap<>();String hrefTemp = a.get(i).attr("abs:href");String titleTemp = a.get(i).text();String updateTime = time.get(i).text();map.put("href",hrefTemp);map.put("title",titleTemp);map.put("updateTime",updateTime);// 进入详情页Thread.sleep(2000);Document documentDetail = Jsoup.connect(hrefTemp).headers(heards).timeout(10000).ignoreContentType(true).get();Element content1 = documentDetail.getElementById("content");Elements topicdoc = content1.getElementsByClass("topic-doc");// 获取创建时间String createTime = topicdoc.select("h3").select("span.color-green").first().text();Element linkreport = topicdoc.first().getElementById("link-report");Elements topicrichtext = linkreport.getElementsByClass("topic-richtext");// 介绍Elements p = topicrichtext.select("p");StringBuffer text = new StringBuffer();for(Element element:p){text.append(element.text() + "||");}// 图片Elements img = topicrichtext.select("img");List<String> imageList = new ArrayList<>();for(Element element:img){String src = element.attr("abs:src");imageList.add(src);}int index1 = hrefTemp.indexOf("/");int count = getOccur(hrefTemp, "/");int countTemp = 1;while (countTemp != count-1){countTemp++;index1 = hrefTemp.indexOf("/", index1 + 1);}String id = hrefTemp.substring(index1+1,hrefTemp.lastIndexOf("/"));// 存入数据库int countByTopicId = douBanTopicMapper.countByTopicId(id);if(countByTopicId > 0) continue;DouBanTopic douBanTopic = new DouBanTopic();douBanTopic.setId(IdUtil.getId()).setDoubanTopicId(id).setGroupId(douBanGroup.getId()).setTitle(titleTemp).setText(text.toString()).setCreateTime(createTime).setUpdateTime(updateTime).setUrl(hrefTemp);douBanTopicMapper.insertSelective(douBanTopic);if(imageList != null && imageList.size() > 0){for (String image:imageList) {DouBanTopicImg douBanTopicImg = new DouBanTopicImg();douBanTopicImg.setId(IdUtil.getId()).setTopicId(douBanTopic.getId()).setImageUrl(image).setCreateTime(new Date());douBanTopicImgMapper.insertSelective(douBanTopicImg);}}map.put("text",text);map.put("imageList",imageList);map.put("createTime",createTime);map.put("id", id);list.add(map);}return Result.success().setT(list);}catch (Exception e){e.printStackTrace();return Result.error();}
}

5.我采用的是每20分钟定时爬取一次,建立一个小组表。每次从小组表获取链接开始爬取。

CREATE TABLE `douban_group` (`id` varchar(30) NOT NULL COMMENT '主键id',`url` varchar(255) DEFAULT NULL COMMENT '链接',`name` varchar(128) NOT NULL COMMENT '小组名称',`douban_group_id` varchar(30) DEFAULT NULL COMMENT '豆瓣组id',`create_time` datetime DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

基于jsoup的java爬虫-爬取豆瓣小组租房信息相关推荐

  1. [Python]学以致用爬取豆瓣小组租房信息

    因为马上毕业面临着找房子的需求,在知乎上搜索了一下,发现豆瓣小组推荐的比较多.但是豆瓣小组得一个一个看不方便,想起了昨天学的爬虫,正好可以学以致用,开心之余发了条朋友圈,没想到有相同需求的朋友还不少, ...

  2. 基于Jsoup的Java爬虫-爬取必应壁纸网站的壁纸(Java静态壁纸爬虫实例)

    准备阶段 1.必应壁纸网站:https://bing.ioliu.cn(爬取对象网站) 2.Jsoup包下载地址:https://jsoup.org/download(以下代码需要用到该包,记得导入包 ...

  3. Jsoup学习 JAVA爬虫爬取美女网站 JAVA爬虫爬取美图网站 爬虫

    最近对爬虫起了兴趣,但是网上都说做爬虫最好得语言是py.但是我只会java,所以就想能不能用java实现一个爬虫,百度搜索发现,其实java也有很多优秀得开源爬虫框架,包括Gecco,webmagic ...

  4. python爬虫爬取58同城租房信息(使用动态IP)输出Excel文件

    python爬虫爬取58同城信息(使用动态IP) 新手,为了做一个数据分析,搞了几天,终于搞出来了,大家可以给点意见啊. # coding=utf-8 import sys import csv im ...

  5. python爬虫--爬取链家租房信息

    python 爬虫-链家租房信息 爬虫,其实就是爬取web页面上的信息. 链家租房信息页面如下: https://gz.lianjia.com/zufang/ ## python库 Python库 1 ...

  6. JAVA爬虫 - 爬取豆瓣租房信息

    最近打算换房子,豆瓣上面的租房小组相对来说较为真实,但是发现搜索功能不是那么友好,所以想把帖子的数据都爬到数据库,自己写sql语句去筛选,开搞! 每步过程都贴上完整代码,感兴趣的可以看下过程,没时间的 ...

  7. 爬虫爬取赶集网租房信息

    一.爬虫–scrapy 1.搭建环境 代码如下(示例): import scrapy import numpy as np import pandas as pd import matplotlib. ...

  8. Java爬虫 --- 爬取王者荣耀英雄图片

    Java爬虫 - 爬取王者荣耀英雄图片 import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.nodes.Docu ...

  9. Java爬虫 爬取某招聘网站招聘信息

    Java爬虫 爬取某招聘网站招聘信息 一.系统介绍 二.功能展示 1.需求爬取的网站内容 2.实现流程 2.1数据采集 2.2页面解析 2.3数据存储 三.获取源码 一.系统介绍 系统主要功能:本项目 ...

最新文章

  1. Integer 和 int的种种比较
  2. TDD测试驱动开发过程
  3. DI容器是代码污染者
  4. 适合新手使用的编辑制作管理软件:Substance Alchemist Mac版
  5. Identity Server4学习系列四之用户名密码获得访问令牌
  6. 相机标准之onvif---开放型网络视频接口论坛onvif 简介
  7. php form表单验证,Validform表单验证总结篇
  8. checksum命令 linux,Windows相当于linux cksum命令
  9. AndroidOpenCV摄像头预览全屏问题
  10. 正则 负数 python_如何系统的自学 Python?“从新手到大师”的百天之路(上)
  11. 掌握C语言判断素数(质数)相关内容
  12. 收藏|史上最全最实用的运营工具库,你想要的都在!
  13. java aspect调用,在Spring 中使用@Aspect 控制自定义注解的操作
  14. 正则表达式(规则+代码)
  15. word中如何制作三线表
  16. 赋能 打造应对不确定性的敏捷团队 pdf_协会成长课堂|《赋能》:打造应对不确定性的敏捷团队...
  17. Python个人博客项目-5.统计数据应用开发
  18. HAUTOJ 1265
  19. 学会自我管理有哪些好处?自我管理包括哪些内容?
  20. 自建对象存储 minio 搭建和使用

热门文章

  1. 2022年计算机专业毕业设计课题推荐
  2. python实现滑动京东滑块验证码
  3. 计算机网络路由器的配置连接不上,路由器设置好了电脑连接不上怎么办
  4. SAP ABAP URL超链接设置处理
  5. hmi服务器在宽限期下运行,通过HMI/SCADA 系统(如 WinCC)中的 SNMP OPC服务器,使用 ActiveX控件监测SIMATIC NET系列的SNMP兼容设备...
  6. solar walk解锁 android,Solar Walk
  7. uni-app图片裁剪按照16:9或者9:16尺寸裁剪
  8. Tomcat配置SSL
  9. Tomcat 配置Oracle JNDI数据源
  10. 节能环保,让我们还地球一碧水蓝天