刨根問底--技術--jsoup簡單抓取數據

使用jsoup抓取信息步驟 javascript

 

一、加入jsoup-1.6.2.jar php

二、準備好url html

三、創建鏈接--Jsoup.connect(url) java

四、解析html--Connection.get() node

package com.xing.jsoup;

import java.io.IOException;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.xing.crawl.LinkQueue;

public class EasyCrawl {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String url = "http://kaoshi.edu.sina.com.cn/collegedb/collegelist.php?_action=t&provid=1" ;
		String baseUrl = "http://kaoshi.edu.sina.com.cn/";
		EasyCrawl easyCrawl = new EasyCrawl();
		easyCrawl.collegeTotalPage(url, baseUrl);
	}
	
	public void collegeTotalPage(String url , String baseUrl){
		LinkQueue.addUnvisitedUrl(url); 
		Document doc;
		try {
			Connection conn = Jsoup.connect(url);
			//設置超時時間
			conn.timeout(5000);
			doc = conn.get();
		    Elements trs = doc.select("table.c_list tr");
		    Element lastTr = trs.get(trs.size()-1);
		    if(lastTr.select(".pagebox_cur_page").size()==1){
		    	Elements as = lastTr.select("a");
	    	 	int length = as.size();
			    if(as!=null && length > 0){
			    	for(int p=0 ; p< length-1 ; p++){
			    		 Element page = as.get(p);
			    		 System.out.println(page.attr("href"));
			    		 LinkQueue.addUnvisitedUrl(baseUrl+page.attr("href")); 
			    	}
			    }
		    }
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

註釋:這裏主要是抓取這個網頁table下面的分頁頁數以及鏈接,而且把這個鏈接地址保存起來,一邊後面的抓取。 api

詳細分析一下collegeTotalPage方法: url

(1)LinkQueue.addUnvisitedUrl(url)把抓取的數據添加到已經訪問的棧裏,一邊去分是否抓取,防止重複抓取。 spa

(2)Connection conn = Jsoup.connect(url);connect(String url) 方法建立一個新的 Connectioncode

(3)conn.timeout(5000)設置鏈接超時時間。 htm

(4) get() 取得和解析一個HTML文件,返回一個Document 對象。

(5)使用相似於CSS或jQuery的語法來查找和操做元素,而且解析裏面的url,添加到爲訪問的棧裏面。

 備註:jsoup執行javascript

ScriptEngineManager manager = new ScriptEngineManager();
2             ScriptEngine engine = manager.getEngineByName("JavaScript");
3  
4             engine.eval(new InputStreamReader(Login.class
5                     .getResourceAsStream("/sha1.js")));
6             Object t = engine.eval("CryptoJS.SHA1('" + password
7                     + "').toString();");
8             System.out.println(t);

若是你不明白是怎麼解析出來的?請看漢語API http://www.open-open.com/jsoup/selector-syntax.htm

相關文章
相關標籤/搜索