jsoup编写java爬虫

版权声明:博主GitHub地址https://github.com/suyeq欢迎大家前来交流学习 https://blog.csdn.net/hackersuye/article/details/83099186

    jsoup是一款简洁轻便的java网络爬虫库,因为它的API与DOM对象操作直接挂钩,所以收到了广泛的欢迎,下面来讲解如何爬取京东上的图书。
    因为我是采用的gradle框架来完成集成的,所以可以直接添加jsoup的依赖:

 compile('org.jsoup:jsoup:1.10.2')

    如果您不使用gradle框架,可以下载jsoup.jar文件。点击下载jar文件,在下载完成后,将上面的 jsoup.jar 添加到项目类库中便可以了。我们定义一个Book类来存放对应的数据:

public class Book {
    private String id;
    private String name;
    private String price;
    public Book(){

    }
    public Book(String id, String name, String price){
        this.id=id;
        this.name=name;
        this.price=price;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public String toString(){
        return "["+id+"="+id+" name="+name+" price="+price+"]";
    }
}

    找到自己需要爬去的网址,这里使用京东的书城来讲解:https://search.jd.com/Search?keyword=redis&enc=utf-8&qrst=1&rt=1&stop=1&book=y&vt=2&wq=redis&page=3&s=178&click=0
在这里插入图片描述

    对其网页源码分析可知,书所在的位置是一个ul列表,我们只需要利用jsoup将ul列表中的数据拿出来就可以了,代码如下:

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.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String args[]) throws IOException {
        List<Book> list=new ArrayList<>();
        String url="https://search.jd.com/Search?keyword=redis&enc=utf-8&qrst=1&rt=1&stop=1&book=y&vt=2&wq=redis&page=1&s=178&click=0";
        //取得dom对象
        Document doc = Jsoup.connect(url).get();
        int count=0;
        while (doc!=null){
            doc = Jsoup.connect(url).get();
            //获取解析其元素
            Elements elements=doc.select("ul[class=gl-warp clearfix]").select("li[class=gl-item]");
            for (Element ele:elements) {
                String bookID=ele.attr("data-sku");
                String bookPrice=ele.select("div[class=p-price]").select("strong").select("i").text();
                String bookName=ele.select("div[class=p-name]").select("em").text();
                Book book=new Book();
                book.setId(bookID);
                book.setName(bookName);
                book.setPrice(bookPrice);
                list.add(book);
            }
            for (Book model:list) {
                count++;
                System.out.print(model);
                System.out.println("                        "+count);
            }
            url=replace(url);
        }
    }

    public static String replace(String s){
        int index=s.indexOf("page");
        int page=s.charAt(index+5)-48+2;
        String s1=s.substring(0,index+5);
        String s2=s.substring(index+6,s.length());
        return s1+page+s2;
    }
}

    利用page属性的不同来遍历抓取京东上的书,将其加入list列表中。

猜你喜欢

转载自blog.csdn.net/hackersuye/article/details/83099186