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元素爬取样例就完成了


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


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

目录
相关文章
|
1月前
|
XML 前端开发 数据格式
请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
【2月更文挑战第22天】【2月更文挑战第67篇】请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
|
4月前
|
JSON 前端开发 Java
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
60 0
|
8天前
|
数据采集 前端开发 网络协议
如何使用代理IP通过HTML和CSS采集数据
如何使用代理IP通过HTML和CSS采集数据
|
2月前
|
Java Maven
java获取文件编码,jsoup获取html纯文本
java获取文件编码,jsoup获取html纯文本
13 0
|
4月前
|
JavaScript 前端开发
【HTML+REACT+ANTD 表格操作】处理(改变)数据,改变DOM
【HTML+REACT+ANTD 表格操作】处理(改变)数据,改变DOM
|
5月前
|
JSON 前端开发 数据格式
ajax请求模拟json数据并且拼接到html
ajax请求模拟json数据并且拼接到html
28 0
|
5月前
|
存储 Web App开发 移动开发
HTML5在客户端存储数据的新方法——localStorage
HTML5在客户端存储数据的新方法——localStorage
83 0
|
6月前
20EasyUI 数据网格- 转换 HTML 表格为数据网格
20EasyUI 数据网格- 转换 HTML 表格为数据网格
20 0
|
8月前
|
前端开发 Java
前端——HTML或者JSP页面--执行完某事件后刷新页面,重置表单,清空数据
前端——HTML或者JSP页面--执行完某事件后刷新页面,重置表单,清空数据
|
SQL 存储 算法
使用Jsoup过滤HTML标签,获取纯文本
使用Jsoup过滤HTML标签,获取纯文本
450 0
使用Jsoup过滤HTML标签,获取纯文本