jsoup爬取HTML数据

简介: jsoup是一个用于处理真实世界HTML的Java库。它提供了一个非常方便的API,用于获取URL、提取和操作数据,使用最好的HTML5 DOM方法和CSS选择器。

免责声明:本文所记录的技术手段及实现过程,仅作为爬虫技术学习使用,不对任何人完全或部分地依据本文的全部或部分内容从事的任何事情和因其任何作为或不作为造成的后果承担任何责任


jsoup介绍


jsoup is a Java library for working with real-world HTML. It provides a very convenient API for fetching URLs and extracting and manipulating data, using the best of HTML5 DOM methods and CSS selectors.


翻译成中文:


jsoup是一个用于处理真实世界HTML的Java库。它提供了一个非常方便的API,用于获取URL、提取和操作数据,使用最好的HTML5 DOM方法和CSS选择器。


百度百科的解释:


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


具体实践


1. 目的


获取搜索到的商品图片链接、名称、价格、评价数量,获取到排序,看哪种商品的评价数量最多


2. 引入依赖


<!-- jsoup 网页爬虫 -->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.15.4</version>
    </dependency>

2. 分析、编写代码


分析某东搜索页面的元素组成,打开F12,选择左上角的箭头,选择一个元素的区域


jd1.png

可以看到上图中ID为 J_goodsList 的区域就是搜索结果的区域,我们取到这个元素,然后遍历他下面的所有 calss 为 gl-item 以获取到本页面的所有信息



@Override
    public List crawlerJdByKeyword(String keywork) {
        List<Map<String, Object>> list = new ArrayList<>();
        String url = "https://search.jd.com/Search?keyword=" + keywork;
        try {
            Document document = Jsoup.connect(url).get();
            Element j_goodsList = document.getElementById("J_goodsList");
            Elements lis = j_goodsList.getElementsByClass("gl-item");
            for (Element li : lis) {
                String imageUrl = li.getElementsByClass("p-img").get(0).getElementsByTag("img").get(0).attr("data-lazy-img");
                String name = li.getElementsByClass("p-name").get(0).getElementsByTag("em").get(0).text();
                String priceStr = li.getElementsByClass("p-price").get(0).getElementsByTag("i").get(0).text();
                Double price = 0.00;
                try {
                    price = Double.parseDouble(priceStr);
                } catch (NumberFormatException e) {
                    log.error("价格转换失败", e);
                }
                // 经过试验,commit 字段获取不到,因为返回的HTML中没有这些信息
                String commit = li.getElementsByClass("p-commit").get(0).getElementsByTag("strong").get(0).getElementsByTag("a").text();
                Double finalPrice = price;
                list.add(new HashMap<String, Object>() {{
                    put("imageUrl", imageUrl);
                    put("name", name);
                    put("price", finalPrice);
                    put("commit", commit);
                }});
            }
        } catch (IOException e) {
            log.error("爬取京东失败", e);
        }
        return list;
    }

3. 测试功能


public static void main(String[] args) {
        JsoupService jsoupService = new JsoupServiceImpl();
        List list = jsoupService.crawlerJdByKeyword("手机");
        System.out.println(list);
    }

获取到的结果为:

jd2.png

commit 字段获取不到,因为返回的HTML中没有这些信息,猜测是为了反爬和网站的响应速度,异步填充加载的


以后再好好研究一下怎么给他弄过来。


好了,一个简单的HTML元素爬取样例就完成了


分享一句诗:宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒


本人小白,才疏学浅,大佬们轻点喷

目录
相关文章
|
2月前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
本文介绍了Twaver HTML5中数据的批量加载方法,通过使用`box.startBatch()`可以在大量数据加载时提高性能。文章通过示例代码展示了如何在React组件中使用批量加载功能,以减少界面重绘次数并提升效率。
58 2
Twaver-HTML5基础学习(20)数据容器(3)_数据的批量加载(节省性能方法)
|
2月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
47 1
|
25天前
|
JavaScript API 开发工具
<大厂实战场景> ~ Flutter&鸿蒙next 解析后端返回的 HTML 数据详解
本文介绍了如何在 Flutter 中解析后端返回的 HTML 数据。首先解释了 HTML 解析的概念,然后详细介绍了使用 `http` 和 `html` 库的步骤,包括添加依赖、获取 HTML 数据、解析 HTML 内容和在 Flutter UI 中显示解析结果。通过具体的代码示例,展示了如何从 URL 获取 HTML 并提取特定信息,如链接列表。希望本文能帮助你在 Flutter 应用中更好地处理 HTML 数据。
103 1
|
2月前
|
XML 移动开发 JSON
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
本文介绍了Twaver HTML5中的数据容器(DataBox),包括如何进行增删查改操作、遍历数据容器以及判断网元是否存在于数据容器中。DataBox用于管理所有的网元对象,如ElementBox、LayerBox、AlarmBox等,并通过示例代码展示了其常用方法的使用。
47 1
Twaver-HTML5基础学习(18)数据容器(1)_增删查改、遍历数据容器、包含网元判断
|
2月前
|
移动开发 前端开发 HTML5
Twaver-HTML5基础学习(2)基本数据元素(Data)
本文介绍了Twaver HTML5中的基本数据元素,包括Data、Element、Alarm和Layer等,它们分别用来描述拓扑的网元、告警和图层。文章详细解释了Data类的基本属性和方法,并提供了如何在React组件中使用Twaver创建节点和连线的示例代码。
44 1
Twaver-HTML5基础学习(2)基本数据元素(Data)
|
2月前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
|
2月前
|
移动开发 前端开发 JavaScript
Twaver-HTML5基础学习(3)基本数据元素(Data)其他功能函数以及组Group
本文介绍了Twaver HTML5中Data类的其他功能函数,如获取和操作子网元的方法,以及组(Group)的概念和使用。文章通过示例代码展示了如何在React组件中创建组、添加图元到组中,并通过toChildren函数获取满足特定条件的图元。
37 0
Twaver-HTML5基础学习(3)基本数据元素(Data)其他功能函数以及组Group
|
1月前
|
XML Web App开发 数据格式
HTML 页面显示 XML 数据
10月更文挑战第2天
|
1月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
31 0
|
3月前
|
Java 开发者 关系型数据库
JSF与AWS的神秘之旅:如何在云端部署JSF应用,让你的Web应用如虎添翼?
【8月更文挑战第31天】在云计算蓬勃发展的今天,AWS已成为企业级应用的首选平台。本文探讨了在AWS上部署JSF(JavaServer Faces)应用的方法,这是一种广泛使用的Java Web框架。通过了解并利用AWS的基础设施与服务,如EC2、RDS 和 S3,开发者能够高效地部署和管理JSF应用。文章还提供了具体的部署步骤示例,并讨论了使用AWS可能遇到的挑战及应对策略,帮助开发者更好地利用AWS的强大功能,提升Web应用开发效率。
67 0