Jsoup是一個Java開源HTML解析器,可直接解析某個URL地址、HTML文本內容。經過Dom或Css選擇器來查找、取出數據,實現爬蟲。java
maven座標node
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.11.2</version> </dependency>
Jsoup開發指南(中文版)jquery
演示Demoweb
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import java.io.IOException; public class JsoupDemo { public static void main( String[] args ) throws IOException { Document doc = Jsoup.connect("http://www.baidu.com").get(); System.out.println("title:"+doc.title()); Elements es = doc.select("area"); //Elements es = doc.getElementByTag("area"); System.out.println("百度圖片點擊路徑:"+es.attr("href")); } }
PhantomJS是一個可編程的無頭瀏覽器。經過PhantomJs能夠採集Ajax生成的內容。編程
無頭瀏覽器:一個完整的瀏覽器內核,包括js解析引擎,渲染引擎,請求處理等,可是不包括顯示和用戶交互頁面的瀏覽器。瀏覽器
步驟:maven
演示Demoui
var page = require("webpage").create(), //網頁對象 system = require("system"), //系統對象 address,t; phantom.outputEncoding='gbk'; //設置輸出編碼 //phantom.outputEncoding='utf-8'; //設置輸出編碼 var arr = system.args; //判斷參數是否傳入 if(arr.length==1){ console.log("請輸入待請求url"); phantom.exit(0); } else { address = arr[1]; console.log("開始訪問頁面:"+address); t = Date.now(); //訪問頁面 page.open(address,function(status){ if(status !== 'success'){ console.log('page faild to load.'); phantom.exit(); } else { t = Date.now() - t; console.log("頁面訪問結束:耗時:"+t+"ms"); //引入jquery page.includeJs("http://code.jquery.com/jquery-2.2.4.min.js",function(){ var result = (page.evaluate(function(){ return $('area').attr('href'); })); console.log("圖片點擊路徑:"+result); phantom.exit(); }) } }) }
假設文件名爲 c:/baidu.js;在命令行中執行 phantomjs c:/baidu.js http://www.baidu.com編碼
java 調用Phantomjs
演示Demo
import java.io.*; public class PhantomJsDemo { public static void main( String[] args ) throws IOException { Runtime rn = Runtime.getRuntime(); String url = "http://www.baidu.com" Process process = rn.exec("phantomjs c:/baidu.js " + url); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); StringBuffer sb = new StringBuffer(); String temp = ""; while((temp=br.readLine())!=null){ sb.append(temp); } System.out.println(sb.toString()); } }