JSOUP获取资源

Java爬虫

背景:工作当中多多少少需要从互联中获取一些信息,听得最多的爬虫语言是python,但为了爬一些信息,重新投入学习它,有点得不偿失。Java也可以是实现信息的爬去,这里主要介绍并总结JSOUP框架下的爬虫

解析html熟悉api

利用jsoup解析html文本,也算是一个hello word吧;

在pom中添加jsoup依赖,如下图:

Code 如下:

同样这个框架提供了很多的api,如下可以获取html对应某个标签的值;

Elements elements = document.getElementsByTag("p");

for(Element element : elements){


String text = element.ownText();


System.out.println(text);

}

更多的api可以去官方网站上查询,https://jsoup.org/apidocs/

实战

从网页上获取自己想要的内容,首先获取目标,我这边以简书上的一份博客为例:

按F12,找的你感兴趣的部分,需要一点HTML便签的基础,然后对应JSOUP的api开始编程;

代码如下:

public class ReptileNetWork {

//    private static final String URL = "https://hzxkctk.cn/Guide/2019920/1568962042448_1.html";

    private static final String URL = "https://www.jianshu.com/p/01a4ed127a52";


public static void main(String[] args) {


try {


trustEveryone();


// 方式一:直接调用connect

            Document documented = Jsoup.connect(URL).get();


// 方式二:直接调用connect

//            Document documented = Jsoup.connect(URL)

//                    .data("query", "Java")

//                    .userAgent("Mozilla")

//                    .cookie("auth", "token")

//                    .timeout(3000)

//                    .post();

            String title = documented.title();


System.out.println("头"+title);


Elements elements =  documented.getElementsByClass("_2rhmJa");


for(Element element : elements){


Elements pe = element.getElementsByTag("p");


pe.stream().forEach(x->{


System.out.println(x.text());

                });

            }


String body = documented.body().ownText();


System.out.println(body);

        }

catch (IOException e) {


e.printStackTrace();

        }

    }

我这边是直接获取css的class为_2rhmJa下p标签中的内容;运行之后的效果:

问题

如果碰到https协议的url,需要加上ssl认证,在连接获取之前,调用下放代码:

/**

 *信任任何站点,实现https页面的正常访问

 *

 */

public static void trustEveryone() {


try {


HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {


@Override

            public boolean

verify(String hostname, SSLSession session) {


return true;

            }

        });


SSLContext context = SSLContext.getInstance("TLS");


context.init(null, new X509TrustManager[] { new X509TrustManager() {


@Override

            public void

checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {

            }


@Override

            public void

checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

            }


@Override

            public

X509Certificate[] getAcceptedIssuers() {


return new X509Certificate[0];

            }

        } },

new SecureRandom());


HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());

    }

catch (Exception e) {


// e.printStackTrace();

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容