1. 程式人生 > >java的jsoup介紹--java爬蟲與java解析html

java的jsoup介紹--java爬蟲與java解析html

         最近的工作需要從網上抓取些資訊,奈何不會python,暫時又沒時間去研究它,只好用java來搞了。事實證明,做爬蟲不一定要用python,java一樣能做到。jsoup是java的文件解析工具,很方便,很強大。它可以將html檔案、字串或URL轉化為Document物件,然後可以通過DOM、CSS和類似jQuery的操作方式,取出或設定屬性和內容。它還可以清理不受信任的html,以防止XSS攻擊。你能想到的,幾乎它都能實現。

        先簡單講一下爬蟲。爬蟲,屬於灰色區域吧,它從網際網路上抓取我們所需的資訊,可以自動按時執行,以一定的規則抓取頁面,處理後儲存或利用起來,把別人的資源變成自己的。一般先建立一個爬蟲佇列,將初始URL放入佇列;爬取初始URL,獲取內容和URL連結,內容處理,蒐集儲存自己需要的資源,連結標記為已爬取;獲取內容裡的所有url,將自己需要的url加入爬蟲佇列;從佇列裡取出一個未標記的url,繼續爬取,獲取內容,繼續擴充爬蟲佇列;當所有url都是已爬取,爬取結束。

       再說一下jsoup。主要來說,使用它進行爬取,需要三步。

       首先,獲取html,可以是檔案,也可以是html字串,也可以是url連結。然後,將html轉化為Document物件。最後處理Document物件。處理時,可以獲取指定id的元素屬性或內容,也可以通過標籤獲取。可以獲取1個物件,也可以獲取1個佇列。如果通過jsoup的方法滿足不了你的資料擷取需求,可以繼續用處理字串的方法處理,字串拆分(split)成陣列,再獲取,或者用substring獲取。

       下面以抓取匯率資訊做個簡易demo,抓取人民幣到美元的匯率。直接上程式碼:

public static void main(String args[]) throws IOException{
		//jsoup文件:https://jsoup.org/apidocs/
		String from = "CNY";
		String to = "USD";
		String url = "http://hl.anseo.cn/cal_"+from+"_To_"+to+".aspx";
		Document doc = Jsoup.connect(url).get();
		Element  result = doc.getElementById("result");
		if(null != result ){
			Element pElement = result.getElementsByTag("p").get(1);
			System.out.println("所需的字串:"+pElement);
			String [] array = pElement.html().split(" ");
			int i = 0;
			for(String aString : array){
				System.out.println("處理之後,array["+i+"]=\""+aString+"\"");
				i++;
			}
			String fromName = array[1];
			String toName = array[4];
			//double除法有問題,用bigdecimal
			BigDecimal a1 = new BigDecimal(array[3]);    
			BigDecimal rate = a1.multiply(new BigDecimal("0.01"));
			System.out.println("結果所需要的五個元素:"+fromName+"("+from+"),"+toName+"("+to+"),"+rate.doubleValue());
			System.out.println("匯率結果:"+rate.doubleValue());
		}
	}
執行結果:
所需的字串:<p>100 人民幣 = 14.5100 美元</p>
處理之後,array[0]="100"
處理之後,array[1]="人民幣"
處理之後,array[2]="="
處理之後,array[3]="14.5100"
處理之後,array[4]="美元"
結果所需要的五個元素:人民幣(CNY),美元(USD),0.1451
匯率結果:0.1451
      由此可見,只要是這個網站支援的匯率展示,我都可以抓取出來,存起來之後,就可以對外提供服務了。包裝成對外的實時介面也是可以的,實時的去抓取這個網頁,結果返回給使用者。其他的業務也是類似,好多公司的資料都是這麼來的,但是要考慮到被封殺和下毒的風險,還有法律風險嘍。這只是個簡單的例項,實際的爬蟲程式,會更為複雜和強大,還會用到定時任務,資料庫儲存(DB,mongo,redis),索引(solr,Elasticsearch),多執行緒等技術。

    以上,jsoup真的很強大,java果然是世界上最棒的語言。