1. 介绍

Jsoup是Java中的一个包,可以用于爬取页面中的数据

Jsoup爬取数据分为以下几个步骤:
1. 获取所爬取网页的Document对象
2. 找到所爬取数据所在的父级标签,将其从Document对象中解析出来,解析出来的内容放置在Element对象中
3. 再在Element中通过每一个数据所在的子标签去解析,解析出来的内容放置在Elements对象中
4. 最后再通过每一个Element对象中的属性获得想要爬取的数据

接下来以爬取京东商品页面中的商品数据为例

2. 新建SpringBoot项目,并导入依赖

<!-- 解析网页 -->
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version>
</dependency>
<!-- lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>

3. 确认进行爬取的链接

进入京东官网,随便搜索一个商品,看上方的链接
例如:https://search.jd.com/Search?keyword=笔记本&enc=utf-8&wq=笔记本&pvid=371fd4a6b1ef4b138e493cd39d4a34dc

去掉后面多余的参数,得到最后的目标链接:
https://search.jd.com/Search?keyword=笔记本

这个就是最后我们爬取数据时需要的链接

//  获取请求  https://search.jd.com/Search?keyword=java
String url = "https://search.jd.com/Search?keyword=" + keywords;/*解析网页超过 30s 没有返回就报错Jsoup返回的Document就是浏览器的Document对象
*/
Document document = Jsoup.parse(new URL(url), 30000);

4. 找到所有数据的父级标签

找到所有商品所在的父级div,通过其id获取该div的Element对象

/*J_goodsList 是京东数据展示的那个 div 的名字获取上述 url 中 div 名字为 J_goodsList 的 html
*/
Element element = document.getElementById("J_goodsList");

5. 找到每个数据放置的标签


发现页面中每个商品的数据都是放在li里,然后通过getElementsByTag()方法获取上述父级盒子的Element对象里所有li标签的Element对象集合

//  获取 J_goodsList 中的所有 li,然后进行循环
Elements elements = element.getElementsByTag("li");
for (Element el : elements) {...
}

6. 准备对象

本次只爬取页面中商品的标题,图片链接和价格

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Content {private String title;private String img;private String price;
}

6.1 找到数据所处的位置

位置都是通过标签里的属性来进行定位的

普及:
大部分图片特别多的网站,所有的图片都是延迟加载的,即在页面进行渲染时,图片的链接不是放在标签的src属性中
所谓延迟加载,意思是页面在出现的时候,所有图片不会立马显现出来,而是都会先默认显示一张图片,等到真正的图片传输过来时才将默认图片替换成真正的图片

所以在这里寻找图片链接时,不能去寻找图片的src属性

6.1.1 寻找图片


在京东,图片的真正地址在img标签里的data-lazy-img属性中。所以我们要获取上述li标签里的img标签的属性

/*getElementsByTag 通过标签进行获取eq(0) 获取第一个元素attr() 获取属性里的值
*/
String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");

6.1.2 寻找价格数据所处位置

/*getElementsByClass 通过 class 的名字进行获取eq(0) 获取第一个元素text()  所有的文本
*/
String price = el.getElementsByClass("p-price").eq(0).text();

6.1.3 寻找标题数据所处位置

/*getElementsByClass 通过 class 的名字进行获取eq(0) 获取第一个元素text()  所有的文本
*/
String title = el.getElementsByClass("p-name").eq(0).text();

7. 将找到的数据封装进对象

完整代码如下:

import com.gec.pojo.Content;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;public class HtmlParseUtil {public static void main(String[] args) throws IOException {new HtmlParseUtil().parseJD("搞笑").forEach(System.out::println);}public List<Content> parseJD(String keywords) throws IOException {String url = "https://search.jd.com/Search?keyword=" + keywords;Document document = Jsoup.parse(new URL(url), 30000);Element element = document.getElementById("J_goodsList");//  获取 J_goodsList 中的所有 liElements elements = element.getElementsByTag("li");List<Content> goodsList = new ArrayList<>();//  获取元素中的内容,这里是 el ,就是每一个li标签for (Element el : elements) {String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");String price = el.getElementsByClass("p-price").eq(0).text();String title = el.getElementsByClass("p-name").eq(0).text();Content content = new Content();content.setImg(img);content.setPrice(price);content.setTitle(title);goodsList.add(content);}return goodsList;}
}

8. 结果

Content(title=汇鑫泉运通 假山流水喷泉屏风高山水景观流水墙水幕墙风水轮家居公司前台风水轮招财落地摆件装饰品 7079 (长91*宽51*高170CM), img=//img12.360buyimg.com/n7/jfs/t1/154317/8/10257/352628/5fdac831Efef04fcb/13a5e3a464c0c024.jpg, price=¥3188.00)
Content(title=抖音同款网红遥控大便屎玩具便便车发声仿真粑粑恶搞整蛊搞笑礼物 遥控便便 普通电池款 抖音同款网红遥控大便屎玩具便便车发声仿真粑粑恶搞整蛊搞笑礼物 遥控便便 普通电池款, img=//img11.360buyimg.com/n7/jfs/t1/135096/39/22238/136938/61e57f8fE8f1f97a3/7a462e78f4d3b762.jpg, price=¥25.80)
...

java-jsoup爬虫相关推荐

  1. Java+Jsoup爬虫小红书

    源码链接:https://pan.baidu.com/s/1oOAxJqSMCyVJPNv-iAYW7A 提取码:1co9 Java+Jsoup爬虫小红书,微博,B站 爬取地址:https://www ...

  2. Java+Jsoup爬虫微博

    源码链接:https://pan.baidu.com/s/1oOAxJqSMCyVJPNv-iAYW7A 提取码:1co9 Java+Jsoup爬虫小红书,微博,B站 爬取地址:https://wei ...

  3. Java JSOUP爬虫学习分享

    昨天从狂神大佬那学习了如何用jsoup爬去网站数据,现在整理了一下给大家分享一下. 先创建一个名叫JsoupPojo的实体类用来装入数据. @Data public class JsoupPojo { ...

  4. Jsoup:使用Java将爬虫得到的数据写入Excel,Jsoup得到的数据进行持久化,爬虫数据保存到本地Excel中

    Jsoup:使用Java将爬虫得到的数据写入Excel,Jsoup得到的数据进行持久化,爬虫数据保存到本地Excel中 一.资源 EasyExcel使用教程 Jsoup爬虫教程 二.代码 xml依赖 ...

  5. Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索

    Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索 一.资源 为什么接下来的代码中要使用el.getElementsByTa ...

  6. 详解用Java实现爬虫:HttpClient和Jsoup的介绍及使用(请求方式、请求参数、连接池、解析获取元素)

    一.介绍:何为爬虫 网络爬虫(Web crawler)也叫做网络机器人 可以代替人 自动地在互联网中进行数据信息的采集和整理 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 可以自动采集所有 ...

  7. java jsoup 网络爬虫 jsoup解析html Java爬虫 Jsoup爬虫 jsoup例子

    java jsoup 网络爬虫 java jsoup 网络爬虫 学习例子(一)抓取豆瓣电影名称+推荐星级 java jsoup 网络爬虫 学习例子(二)只抓取豆瓣电影5星(力荐)电影名称 java j ...

  8. java jsoup 多线程爬虫Miner

    java jsoup 多线程爬虫Miner 需要配置项: 1.URL包含关键字. 2.存储方式:DB-数据库存储;FILE-文件存储. 3.爬取页面最大深度. 4.下载页面线程数. 5.分析页面线程数 ...

  9. java毕业设计——基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码)——网络新闻分析系统

    基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Jsoup+HttpClient的网络爬虫技术的网络 ...

  10. java jsoup 网络爬虫 学习例子(八)京东和淘宝商品比价 PhantomJS

    java jsoup 网络爬虫 学习例子(八)京东和淘宝商品比价 PhantomJS /** filename getHtml.js* phantomjs.exe 2.0.0* author InJa ...

最新文章

  1. 《预训练周刊》第4期:智源「悟道1.0」发布、GPT-3对新一代APP的赋能路径
  2. Oracle Database 12c DBA文官手册(第8版)——第5章 开发和实现应用程序
  3. 【Linux入门连载一】[Win10下安装Linux虚拟机]VMWare15运行CentOS7(亲测有效)
  4. 时钟源为什么会影响性能
  5. 网络配置 rpm yum
  6. chart.js绘制精美的数据化图形--入门示例
  7. qt5.11 linux oracle,Qt5.11.1 + VS2017环境搭建(Qt5.11在windows上的安装)
  8. python3知识点汇总_35个高级Python知识点总结
  9. 浅谈JS、Ajax、JQuery之间的关系
  10. 浅析天际网、IT260、微人脉等中国职业社交网站
  11. Java实现简易文本编辑器
  12. iostream头文件简单理解
  13. python ftp下载上传文件或文件夹
  14. 如何快速删除某几页的页眉页脚
  15. 对讲机有哪些?如何选购对讲机?
  16. 红米4A全版本通刷_2016111 2016112_官方线刷包_救砖包_解账户锁
  17. 【烈日炎炎战后端】Git(0.1万字)
  18. 简单使用SAXReader解析xml数据
  19. 华为RIP动态路由实例
  20. 开源网校系统如何搭建

热门文章

  1. 车站计算机系统sc英文,【地铁小百科】自动售检票系统概述
  2. 动态域名解析NAT版结合绿盾加密解密软件使用方法
  3. 超星学习通 吉林大学 程序设计基础 实验07 递归程序设计(2022级)
  4. 以客户的名义,宏杉科技“存储七项式”律己律人
  5. 判断在ios系统中打开微信浏览器
  6. 非合作博弈篇——纳什均衡(Nash Equilibrium)
  7. 深入理解jvm虚拟机笔记
  8. 2018年通信工程师中级传输与接入无线专业实务真题
  9. 批量模糊匹配的三种方法
  10. 公众号 html5页面,微信公众号添加h5页面模板的操作方法是什么?