Jsoup获取一个HTML页面的基本标签、Java解析HTML标签

jsoup获取meta标签、jsoup获取img标签、jsoup获取a标签、jsoup获取h标签、Java解析HTML标签

主要是对一个网页的meta、a、img等对SEO有有益的标签

主要代码:(熟悉Jsoup的看这块就行了,直接复制除实体对象外即可使用)

package com.spider.common.jsoup;

import com.spider.common.jsoup.entity.HData;
import com.spider.common.jsoup.entity.HrefData;
import com.spider.common.jsoup.entity.ImgData;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.util.ArrayList;
import java.util.List;

/**
 * 作用:对一个网页的基本解析操作
 * 作者:Tiddler
 * 时间:2018-08-2018/8/3 17:54
 * 类名:BaseParser
 **/
public class BaseParser {
    private final static Logger log= LogManager.getLogger(BaseParser.class);
    private Document document;
    public BaseParser(Document document) {
        this.document = document;
    }

    /**
     * 获取网页中meta标签的keywords值
     * @return
     */
    public String getMetaKeyword(){
        Elements attr = document.select("meta[name=keywords]");
        if(attr!=null){
            Element element = attr.get(0);
            return element.attr("content");
        }
        return null;
    }

    /**
     * 获取网页中meta标签的description值
     * @return
     */
    public String getMetaDescription(){
        Elements attr = document.select("meta[name=description]");
        if(attr!=null){
            Element element = attr.get(0);
            return element.attr("content");
        }
        return null;
    }

    /**
     * 获取页面中所有的a标签
     * @return
     */
    public List getHrefs(){
        Elements attr = document.getElementsByTag("a");
        List hrefDataList=new ArrayList();
        for (Element element : attr) {
            //实体对象构造方法,代码省略
            HrefData hrefData=new HrefData(element.attr("href"),element.attr("title"),element.text());
            hrefDataList.add(hrefData);
        }
        return hrefDataList;
    }

    /**
     * 获取页面中所有img标签
     * @return
     */
    public List getImgs(){
        Elements attr = document.getElementsByTag("img");
        List imgDataList=new ArrayList();
        for (Element element : attr) {
            ImgData imgData=new ImgData(element.attr("src"),element.attr("alt"));//实体对象构造方法,代码省略
            imgDataList.add(imgData);
        }
        return imgDataList;
    }

    /**
     * 获取页面中的h标签
     * @return
     */
    public List getHs(){
        List hDataList=new ArrayList();
        Elements attr1 = document.getElementsByTag("h1");
        for (Element element : attr1) {
            HData hData=new HData("h1",element.text());//实体对象构造方法,代码省略
            hDataList.add(hData);
        }
        Elements attr2 = document.getElementsByTag("h2");
        for (Element element : attr2) {
            HData hData=new HData("h2",element.text());
            hDataList.add(hData);
        }
        return hDataList;
    }
}

使用到的相关类:

启动测试类

/**
 * 作用:
 * 作者:Tiddler
 * 时间:2018-08-2018/8/3 17:51
 * 类名:ParserTest
 **/
public class ParserTest {
    public static void main(String[] args) {
        Document doc = GetDocument.get("https://blog.csdn.net/qq_31384551/article/details/81327255");
        BaseParser baseParser=new BaseParser(doc);
        System.out.println(baseParser.getMetaKeyword());

    }
}

获取Document的类

/**
 * 作用:
 * 作者:Tiddler
 * 时间:2018-08-2018/8/3 17:47
 * 类名:GetDocument
 **/
public class GetDocument {
    /**
     * 传入一个ULR地址,转为Document给jsoup解析
     * @param url
     * @return
     */
    public static Document get(String url){
        String docStr= CreateRequest.doGET(url);
        Document parse = Jsoup.parse(docStr);
        return parse;
    }
}

网络请求类

/**
 * 作用:发起一个http请求,使用okhttp请求,包含GET和POST请求
 * 作者:Tiddler
 * 时间:2018-08-2018/8/3 16:00
 * 类名:CreateRequest
 **/
public class CreateRequest {
    private final static Logger log= LogManager.getLogger(CreateRequest.class);

    /**
     * GET请求一个地址,并且获取那个地址返回的页面文本
     * @param reqUrl
     * @return
     */
    public static String doGET(String reqUrl){
        if(reqUrl.indexOf("http")==-1){
            reqUrl="http://"+reqUrl;
        }
        String responseContext = null;
        OkHttpClient client = new OkHttpClient();
        //加入一些请求头信息,可以针对大多数做了防爬虫的网页
        Request request = new Request.Builder().url(reqUrl)
                .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
                .addHeader("Cookie", "__DAYU_PP=RM6n2mRjmN72jmMj6EEA2a6864d9cc44; _user_behavior_=29bcd06e-a622-4d37-b695-49184ee40871; oscid=18%2B24OHTNObWgBnHCgtLk300eOsXufOKvWH7QK2Ay9CElLuXYaxAILHsw%2BFaKg1sSis1yBGy7tIqZvBCa6l2GXK7Ft8x8NKATm2Iv45JfYRCEpskLpjxpFOZFGHfR3E%2Bqrobjhd%2B3XuDy3ECR9VTzQ2rz4u0Uy1sg97o1G38qCs%3D; bad_id8387c580-a888-11e5-bc38-bb63a4ea0854=1e27ba51-469d-11e8-927f-c364363c7a3c; banner_osc_scr0710=1; aliyungf_tc=AQAAADP46lC7EwoA1NhXZUbBIrn2AIIq; Hm_lvt_a411c4d1664dd70048ee98afe7b28f0b=1531212092,1531352328,1531378414; Hm_lpvt_a411c4d1664dd70048ee98afe7b28f0b=1531384849")
                .get()
                .build();
        try {
            Response response = client.newCall(request).execute();
//            log.debug(response.headers().size());
//            for(int i=0;i

好了,基本就这样子了,熟悉Jsoup的其实只要看第一块代码就OK啦!

你可能感兴趣的:(Java,Java爬虫)