JSOUP中文文檔:http://www.open-open.com/jsoup/
推薦部落格:http://www.cnblogs.com/jycboy/p/jsoupdoc.html
從一個URL加載一個Document
Document doc = Jsoup.connect("http://example.com")
.data("query", "Java")
.userAgent("Mozilla")
.cookie("auth", "token")
.timeout(3000)
.post();
使用DOM方法來周遊一個文檔
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
for (Element link : links) {
String linkHref = link.attr("href");
String linkText = link.text();
}
查找元素
getElementById(String id)
getElementsByTag(String tag)
getElementsByClass(String className)
getElementsByAttribute(String key) (and related methods
元素資料
attr(String key)擷取屬性attr(String key, String value)設定屬性
attributes()擷取所有屬性
id(), className() and classNames()
text()擷取文本内容text(String value) 設定文本内容
html()擷取元素内HTMLhtml(String value)設定元素内的HTML内容
Elements links = doc.select("a[href]"); //帶有href屬性的a元素
Elements pngs = doc.select("img[src$=.png]");//擴充名為.png的圖檔
Element masthead = doc.select("div.masthead").first(); //class等于masthead的div标簽
Elements resultLinks = doc.select("h3.r > a"); //在h3元素之後的a元素
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class OnlineProductDownload {
public void demo1() {
// 從優酷下載下傳包含視訊結果的html
Document doc = getHtmlByName("冷然之天秤");
try {
//選擇第一個結果
Element element = doc.select("div.s_inform").first();
// 擷取播放源,不是優酷本站的傳回(優酷可能會跳轉到其他網站,如:愛奇藝)
Element playSource = element.select("div.pos_area span").first();
if (playSource.text() != "優酷") {
return;
}
//每個li一集(海賊王:第一集、第二集)
Elements li_Elements = element.select("ul.clearfix li");
for (Element li : li_Elements) {
// 擷取第幾集
Element span = li.getElementsByTag("span").first();
String text = span.text();
// 擷取每集詳情的url(并不是視訊的真實url)
Element a = li.getElementsByTag("a").first();
String href = a.attr("href");
// 根據href擷取詳情網頁文本
doc = getHtmlTextByUrl(href);
//查找實際結果标簽
Element sourceLi = doc.select("ul.fn-share-code li").first();
// 根據doc擷取播放插件. 如:
// <iframe src='http://player.youku.com/embed/XMzUwNjM1OTA0MA=='></iframe>
Element input = sourceLi.getElementsByTag("input").first();
String value = input.attr("value");
System.out.println(text + value);
}
// http://v.youku.com/v_show/id_XMzUwNjM1OTA0MA==.html
} catch (Exception e) {
e.printStackTrace();
}
}
// 功能:使用優酷的搜庫來搜尋視訊,并根據名稱擷取網頁文本 如:海賊王
public Document getHtmlByName(String name) {
if (name.isEmpty() || name.length() <= 0) {
return null;
}
// 拼接URL 優酷搜尋形式:http://www.soku.com/search_video/q_海賊王
String url = "http://www.soku.com/search_video/q_";
try {
//url編碼:%E6%B5%B7%E8%B4%BC%E7%8E%8B=海賊王
String encodeStr = URLEncoder.encode(name, "utf-8");
url = url + encodeStr;
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
// 通過url擷取html
try {
Document doc = Jsoup.connect(url).get();
return doc;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
// 根據url從網絡擷取網頁文本
public Document getHtmlTextByUrl(String url) {
Document doc = null;
try {
//拼接成完整的路徑
String str = "http:";
str = str + url;
doc = Jsoup.connect(str).get();
} catch (IOException e) {
e.printStackTrace();
}
return doc;
}
}