Java爬虫系列三:使用Jsoup解析HTML
2019-05-25 16:08
3171 查看
在上一篇随笔《Java爬虫系列二:使用HttpClient抓取页面HTML》中介绍了怎么使用HttpClient进行爬虫的第一步--抓取页面html,今天接着来看下爬虫的第二步--解析抓取到的html。
有请第二步的主角:Jsoup粉墨登场。下面我们把舞台交给Jsoup,让他完成本文剩下的内容。
============华丽的分割线=============
一、Jsoup自我介绍
大家好,我是Jsoup。
我是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据,用Java写爬虫的同行们十之八九用过我。为什么呢?因为我在这个方面功能强大、使用方便。不信的话,可以继续往下看,代码是不会骗人的。
二、Jsoup解析html
上一篇中,HttpClient大哥已经抓取到了博客园首页的html,但是一堆的代码,不是程序员的人们怎么能看懂呢?这个就需要我这个html解析专家出场了。
下面通过案例展示如何使用Jsoup进行解析,案例中将获取博客园首页的标题和第一页的博客文章列表
package httpclient_learn; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.HttpClientUtils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class HttpClientTest { public static void main(String[] args) { //1.生成httpclient,相当于该打开一个浏览器 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; //2.创建get请求,相当于在浏览器地址栏输入 网址 HttpGet request = new HttpGet("https://www.cnblogs.com/"); //设置请求头,将爬虫伪装成浏览器 request.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"); // HttpHost proxy = new HttpHost("60.13.42.232", 9999); // RequestConfig config = RequestConfig.custom().setProxy(proxy).build(); // request.setConfig(config); try { //3.执行get请求,相当于在输入地址栏后敲回车键 response = httpClient.execute(request); //4.判断响应状态为200,进行处理 if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { //5.获取响应内容 HttpEntity httpEntity = response.getEntity(); String html = EntityUtils.toString(httpEntity, "utf-8"); System.out.println(html); /** * 下面是Jsoup展现自我的平台 */ //6.Jsoup解析html Document document = Jsoup.parse(html); //像js一样,通过标签获取title System.out.println(document.getElementsByTag("title").first()); //像js一样,通过id 获取文章列表元素对象 Element postList = document.getElementById("post_list"); //像js一样,通过class 获取列表下的所有博客 Elements postItems = postList.getElementsByClass("post_item"); //循环处理每篇博客 for (Element postItem : postItems) { //像jquery选择器一样,获取文章标题元素 Elements titleEle = postItem.select(".post_item_body a[class='titlelnk']"); System.out.println("文章标题:" + titleEle.text());; System.out.println("文章地址:" + titleEle.attr("href")); //像jquery选择器一样,获取文章作者元素 Elements footEle = postItem.select(".post_item_foot a[class='lightblue']"); System.out.println("文章作者:" + footEle.text());; System.out.println("作者主页:" + footEle.attr("href")); System.out.println("*********************************"); } } else { //如果返回状态不是200,比如404(页面不存在)等,根据情况做处理,这里略 System.out.println("返回状态不是200"); System.out.println(EntityUtils.toString(response.getEntity(), "utf-8")); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { //6.关闭 HttpClientUtils.closeQuietly(response); HttpClientUtils.closeQuietly(httpClient); } } }View Code
相关文章推荐
- 【Java Utility】Jsoup网页爬虫工具--解析HTML语句片段【四】
- java的jsoup介绍--java爬虫与java解析html
- java使用Jsoup解析html字符串
- Java爬虫入门简介(二) —— Jsoup解析HTML页面
- Android开发系列十:使用Jsoup解析HTML页面
- Java - 抓取优酷网视频播放页面(使用jsoup解析html,正则表达式处理字符串)
- 【使用JSOUP实现网络爬虫】入门:解析和遍历一个HTML文档
- 【使用JSOUP实现网络爬虫】解析一个HTML字符串
- Java网页资源抓取例子(使用第三方包Jsoup解析Html)
- Java网络爬虫(四)--使用Jsoup解析html
- 【使用JSOUP实现网络爬虫】入门:解析和遍历一个HTML文档
- 使用 Jsoup 爬虫解析 html 新闻的实例
- Java中使用jsoup解析HTML
- Java使用jsoup解析html
- Java爬虫系列二:使用HttpClient抓取页面HTML
- Java爬虫入门简介(二) —— Jsoup解析HTML页面
- 【网络爬虫】【java】微博爬虫(四):数据处理——jsoup工具解析html、dom4j读写xml
- Java中使用Jsoup对Html文档进行解析和操作
- java三方---->html解析jsoup的使用
- 【使用JSOUP实现网络爬虫】解析一个HTML字符串