1. 程式人生 > >Jsoup代碼示例、解析網頁+提取文本

Jsoup代碼示例、解析網頁+提取文本

執行 jar包 .text set tex ons 分享 使用 登陸

使用Jsoup解析HTML

那麽我們就必須用到HttpClient先獲取到html

同樣我們引入HttpClient相關jar包

以及commonIO的jar包

技術分享

我們把httpClient的基本代碼寫上,然後解析網頁 得到文檔對象

我們獲取title和制定id的文檔對象

技術分享

技術分享

代碼實例:

package com.zhi.jsoup1;


import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
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 Demo {
	public static void main(String[] args) throws Exception {
		CloseableHttpClient httpClient=HttpClients.createDefault(); //1、創建實例
		HttpGet httpGet=new HttpGet("https://home.cnblogs.com/u/mengxinrenyu/"); //2、創建實例
	
		httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0");
		
		CloseableHttpResponse httpResponse=httpClient.execute(httpGet); //3、執行
		HttpEntity entity=httpResponse.getEntity(); //4、獲取實體
		String content=EntityUtils.toString(entity, "utf-8"); //5、獲取網頁內容
		httpResponse.close();
		httpClient.close();
		
		Document doc=Jsoup.parse(content); // 解析網頁 得到文檔對象
        Elements elements=doc.getElementsByTag("title"); // 獲取tag是title的所有DOM元素
        Element element=elements.get(0); // 獲取第1個元素
        String title=element.text(); // 返回元素的文本
        System.out.println("標題:"+title);
        
        element=doc.getElementById("top_left"); // 獲取id=top_left的DOM元素
        String menu=element.text(); // 返回元素的文本
        System.out.println("導航:"+menu);
	}
}

  由於網頁我是登陸以後的,所以會出現以下錯誤

技術分享

因為請求的是某個登陸賬戶下的網頁,所以網頁會提示登錄。從沒沒有相應id的元素,返回NPE。

我們換一個新聞頁面試一下

技術分享

技術分享

代碼示例:

public class Demo {
	public static void main(String[] args) throws Exception {
		CloseableHttpClient httpClient=HttpClients.createDefault(); //1、創建實例
		HttpGet httpGet=new HttpGet("https://news.cnblogs.com/"); //2、創建實例
	
		httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0");
		
		CloseableHttpResponse httpResponse=httpClient.execute(httpGet); //3、執行
		HttpEntity entity=httpResponse.getEntity(); //4、獲取實體
		String content=EntityUtils.toString(entity, "utf-8"); //5、獲取網頁內容
		httpResponse.close();
		httpClient.close();
		
		Document doc=Jsoup.parse(content); // 解析網頁 得到文檔對象
        Elements elements=doc.getElementsByTag("title"); // 獲取tag是title的所有DOM元素
        Element element=elements.get(0); // 獲取第1個元素
        String title=element.text(); // 返回元素的文本
        System.out.println("標題:"+title);
        
        element=doc.getElementById("top_mini_nav_block"); // 獲取id=top_left的DOM元素
        String menu=element.text(); // 返回元素的文本
        System.out.println("導航:"+menu);
	}
}

  運行如圖:

技術分享

Jsoup代碼示例、解析網頁+提取文本