主要框架为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. 25个创意的交互式图表设计欣赏
  2. 使用SDL打造游戏世界之入门篇 - 5
  3. httpClient学习笔记1
  4. 如何理解面向过程和面向对象?
  5. UDP之sendto错误解决
  6. 38 FI配置-财务会计-固定资产-组织结构-指定帐户确定
  7. [loss]Triphard loss优雅的写法
  8. android主题资源,使用 Theme Editor 设计应用主题背景
  9. Java开发工具(Eclipse工作空间的基本配置)
  10. spring异常:Could not resolve placeholder
  11. Java 就业培训教程 再读笔记
  12. 实时数据采集-免费实时数据采集软件
  13. LeetCode题解-6. ZigZag Conversion
  14. sublime license key
  15. 白杨SEO:百度首页和百度SERP的新闻是怎么做上去的?
  16. c语言扫雷游戏构成原理,扫雷游戏的C语言实现
  17. Linux lseek函数
  18. TOJ 3498.Differences
  19. MacBookPro 安装cx_Oracle,并配置环境
  20. 36氪WISE2020新经济之王大会圆满落幕 超170位嘉宾纵论新经济

热门文章

  1. navicat 导出到excel 出现换行、空格等
  2. 麦克风阵列声源定位四通道麦克风数据库及TDOA双曲交汇定位算法实验
  3. CPU套路篇:cpu性能优化的几个思路???
  4. outlook 发送邮件没有“附件”、“主题”提醒
  5. 很全的智力题答案-1
  6. 技术员Windows11 64位 21H2专业版 v2022【装机助手】
  7. Windows如何备份电脑文件(Windows10为例)
  8. 华为手机的分类有何区别_华为手机分为几种类型
  9. vue 报错 Cannot read property ‘_wrapper‘ of undefined
  10. c语言以只写方式打开二进制文件,C语言采用文本方式和二进制方式打开文件的区别分析...