• Jsoup爬虫入门实战


    一、Jsoup介绍

    jsoup 是一款基于 Java 的HTML解析器,它提供了一套非常省力的API,不但能直接解析某个URL地址、HTML文本内容,而且还能通过类似于DOM、CSS或者jQuery的方法来操作数据,所以 jsoup 也可以被当做爬虫工具使用。

    相关概念

    Document :文档对象。每份HTML页面都是一个文档对象,Document 是 jsoup 体系中最顶层的结构。
    Element:元素对象。一个 Document 中可以着包含着多个 Element 对象,可以使用 Element 对象来遍历节点提取数据或者直接操作HTML。
    Elements:元素对象集合,类似于List。
    Node:节点对象。标签名称、属性等都是节点对象,节点对象用来存储数据。
    类继承关系:Document 继承自 Element ,Element 继承自 Node。
    一般执行流程:先获取 Document 对象,然后获取 Element 对象,最后再通过 Node 对象获取数据。
    在这里插入图片描述


    二、实战

    2.1、创建一个springboot项目,并导入依赖
    
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>fastjsonartifactId>
                <version>1.2.7version>
            dependency>
            
    
            <dependency>
                <groupId>org.jsoupgroupId>
                <artifactId>jsoupartifactId>
                <version>1.13.1version>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    2.2、创建实体类,用于封装商品信息
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Content {
        private String title;
        private String img;
        private String price;
        // 可以自己添加属性完善功能
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    2.3、写一个工具类,解析网页
    public static List<Content> parseJD(String keyword) throws IOException {
            /// 使用前需要联网
            // 请求url
            String url = "http://search.jd.com/search?keyword=" + keyword;
            // 1.解析网页(jsoup 解析返回的对象是浏览器Document对象)
            Document document = Jsoup.parse(new URL(url), 30000);
            // 使用document可以使用在js对document的所有操作
            // 2.获取元素(通过id),id自己查网页
            Element j_goodsList = document.getElementById("J_goodsList");
            // 3.获取J_goodsList ul 每一个
            Elements lis = j_goodsList.getElementsByTag("li");
            // System.out.println(lis);
            // 4.获取li下的 img、price、name
            // list存储所有li下的内容
            List<Content> contents = new ArrayList<Content>();
            for (Element li : lis) {
                // 由于网站图片使用懒加载,将src属性替换为data-lazy-img
                String img = li.getElementsByTag("img").eq(0).attr("data-lazy-img");// 获取li下 第一张图片
                String name = li.getElementsByClass("p-name").eq(0).text();
                String price = li.getElementsByClass("p-price").eq(0).text();
                // 封装为对象
                Content content = new Content(name,img,price);
                // 添加到list中
                contents.add(content);
            }
            // System.out.println(contents);
            // 5.返回 list
            return contents;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    2.4、测试
    // 测试一下
        public static void main(String[] args) throws IOException {
            HtmlParseUtil.parseJD("java").forEach(System.out::println);
        }
    
    • 1
    • 2
    • 3
    • 4

    成功爬取到java相关信息的数据

    在这里插入图片描述

    如果有兴趣的小伙伴,也可以和ElasticSearch联动,创建一个索引将爬取的数据入在索引库中,当做搜索库!

  • 相关阅读:
    08、Metasploit渗透测试之信息收集
    组件的使用
    深度学习的未来:继续焕发活力还是逐渐落寞?
    前端架构师之02_ES6_高级
    软件工程基础实验二
    iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践
    JVM-5
    快速搭建Linux网站,并利用内网穿透实现宝塔面板的公网访问【内网穿透】
    记一次进程阻塞诊断
    cx3588 Recovery HDMI 没显示
  • 原文地址:https://blog.csdn.net/G823909/article/details/128072803