通过简单爬取京东商城介绍Jsoup的使用方法

32 篇文章 0 订阅

一、Jsoup

  • Jsoup是一款java版的HTML解析器,可直接解析某个URL地址、HTML文本内容。
  • 解析网页后返回的是一个Document 对象实例,我们可以看到document中有很多类似js的方法 

  • 根据相应的标签找到对象的属性,最后输出我们需要的东西即可。

二、爬取京东商城页面

1. 创建项目,导入依赖

  • 首先创建一个Maven项目,在pom.xml中加入Jsoup的依赖,我们可以在Maven仓库中查找依赖的代码。
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.12.1</version>
</dependency>

2. 分析网页

  • 首先我们打开京东搜索的网页,通过开发者工具可以发现,输入框的id是keyword。

  • 展开 div 标签后,可以发现有很多 li 标签,每一个 li 标签都对应着一本书

  •  展开 li 标签可以看到关于这本书的所有信息,包括图像img,价格p-price,书名p-name等等,我们接下来就要对这些信息进行抓取。

  • 但是因为对于图片特别多的网站,所有的图片都是延迟加载的,也就是懒加载,所以展开p-img会发现真正的图片链接在“source-data-lazy-img”中

3.代码编写

HtmlParseUtil类

package JDParse;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import dao.Content;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class HtmlParseUtil {
    public static void main(String[] args) throws Exception {
        //搜索词可以更换,此处以java为例
        List goodList = new HtmlParseUtil().ParseJD("java");
        for (Object o : goodList) {
            System.out.println(o);
            System.out.println("======================");
        }
    }

    public List<Content> ParseJD(String keywords) throws Exception {
        //获取url请求
        String url = "https://search.jd.com/Search?keyword=" + keywords;
        //解析网页,Jsoup返回的是Document对象(浏览器Document对象)
        Document document = Jsoup.parse(new URL(url), 10000);
        //所有在js中使用的方法,这里都能使用
        Element element = document.getElementById("J_goodsList");
        //在获得网页内容后,获取所有的li标签
        Elements elements = element.getElementsByTag("li");

        ArrayList<Content> goodList = new ArrayList<Content>();

        //获取元素的标签后,再获取标签中的内容
        for (Element el : elements) {
            //关于图片特别多的网站,所拥有的图片都是延迟加载的(懒加载)
            // source-data-lazy-img
            String img = el.getElementsByTag("img").eq(0).attr("source-data-lazy-img");
            String price = el.getElementsByClass("p-price").eq(0).text();
            String name = el.getElementsByClass("p-name").eq(0).text();
            Content content = new Content();
            content.setTitle(name);
            content.setImg(img);
            content.setPrice(price);
            goodList.add(content);
        }
        return goodList;
    }

}

Content类 

package dao;

public class Content {
    private String title;
    private String img;
    private String price;

    public Content() {
    }

    public Content(String title, String img, String price) {
        this.title = title;
        this.img = img;
        this.price = price;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Cotent{" +
                "title='" + title + '\'' +
                ", img='" + img + '\'' +
                ", price='" + price + '\'' +
                '}';
    }
}

4.测试运行

  • 截取部分运行结果来看一下最终效果

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值