Jsoup的作用
當你想獲得某網頁的內容,可以使用此框架做個爬蟲程序,爬某圖片網站的圖片(先獲得圖片地址,之后再借助其他工具下載圖片)或者是小說網站的小說內容
我使用Jsoup寫出的一款小說下載器,小說下載器
Jsoup導入
1. 使用gradle導入
compile 'org.jsoup:jsoup:1.11.1'
2. 第三方包導入
Jsoup使用
1. 獲得Document
-
本地html文件或者使用javaIO流,則使用靜態方法
parse
方法Document document = Jsoup.parse("D:\\test.html");
-
網址的話使用靜態方法
connect().get()
Document document = Jsoup.connect("https://www.baidu.com").get();
2. 根據id找到某標簽 document.getElementById
因為id
是唯一的,所以找到唯一的一個Element
Element element = document.getElementById("id名");
3. 根據class找到某標簽 document.getElementsByClass
class可能不止一個,所以這里返回的是一個Elemnts
數組
Elements elements = document.getElementsByClass("d_title").select("h1");
4. 獲得標簽的內容 element.text()
例如html文件中有段代碼為
<a id="title">hello world</a>
獲得a標簽的內容的代碼為
Element element = document.getElementById("title");
String s = element.text();
5. 獲得標簽的屬性 element.attr()
有段代碼如下:
<a id="main" href="www.baidu.com"></a>
獲得a標簽的鏈接地址
Element element = document.getElementById("main");
String url = element.attr
String s = element.text();
6. 選擇固定標簽(li,p,a等)element.select("a")
返回的是Elements
數組
例如html文件中有段代碼為
<div id="main"><a>hello world!</a></div>
獲得a標簽的內容代碼為
Element element = document.getElementById("main");
Elements elements = element.select("a");
for(int i=0;i<elements.size();i++){
String s = elements.get(i).text();
}
獲取p標簽不能換行
有段代碼
<div id="main">
<p>hello world</p>
<p>this is my name</p>
</div>
我們由id找到了element,我們想要獲得p標簽的內容,怎么辦呢?
剛開始我想的也是使用select方法來選擇p標簽,但是,沒有其作用
正確的方法應該是使用element.text方法獲得內容,但是獲得的內容全是一行的(段落之間是用空格隔開的)
我們想要每個p標簽的內容獨占一行,怎么辦呢?
我們直接把空格替換成\n
即可
String string = element.text().replaceAll(" ","\n");
另外一種方法,如果感覺上面的方法不好用的話(有些小說原本就有些多余的空格),那么就使用下面的方法
Element element = document.getElementById("main");
String text = Jsoup.clean(element.html(), "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));//保存p標簽換行
上面的獲得的內容還有 
標志(html的空格標志),我們還得刪除這個標志以及多余的空行
/**
* 處理空行和“ ”標志
* @param input 內容
* @return 處理過后的結果
*/
public static String deleteCRLFOnce(String input) {
return input.replaceAll("((\r\n)|\n)[\\s\t ]*(\\1)+", "$1").replaceAll(" ", "");
}