Jsoup爬虫入门实战

人生有涯,学海无涯

简介

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

功能

  1. 从URL,文件或字符串中抓取并解析HTML
  2. 使用DOM遍历或CSS选择器查找和提取数据
  3. 处理HTML元素,属性和文本
  4. 根据安全的白名单清除用户提交的内容,以防止XSS攻击
  5. 输出整洁的HTML

jsoup旨在处理野外发现的所有各种HTML;从原始和验证到无效的标签汤;jsoup将创建一个明智的解析树。

有关下载,文档和示例,请参见jsoup.org

包裹描述
org.jsoup包含主Jsoup类,该主类提供对jsoup功能的方便的静态访问。
org.jsoup.examples包含示例程序和jsoup的用法。
org.jsoup.helper包含支持核心jsoup代码的类的软件包。
org.jsoup.internalJsoup使用的Util方法。
org.jsoup.nodesHTML文档结构节点。
org.jsoup.parser包含HTML解析器,标签规范和HTML标记器。
org.jsoup.safety包含jsoup HTML清理程序和安全列表定义。
org.jsoup.select支持CSS样式元素选择器的软件包。

实战

一、新建一个项目,引入依赖

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.10.2</version>
</dependency>

二、我们以京东的搜索为例,我们搜索java关键字,查看一下页面的元素,如下:

在这里插入图片描述

三、demo实例

package com.example.demo.utils;

import com.example.demo.domain.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("java").forEach(System.out::println);
    }

    /**
     * 爬取网页数据
     */
    public List<Content> parseJD(String keyWords) throws IOException {
        String url = "https://search.jd.com/Search?keyword=" + keyWords;
        Document document = Jsoup.connect(url).get();
        Element element = document.getElementById("J_goodsList");
        Elements elements = element.getElementsByTag("li");
        ArrayList<Content> contents = new ArrayList<>();
        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.setTitle(title);
            content.setPrice(price);
            contents.add(content);
        }
        return contents;
    }
}
package com.example.demo.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Content {

    private String img;
    private String title;
    private String price;
}

四、测试结果:

在这里插入图片描述


版权声明:本文为jiang_wang01原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。