獲取頁面內所有地方的以"<<?>>"為標示的這個符號代表書名號,獲取之中的內容?
<<使用正則表達式>>
功能點:?
1)URL抓取頁面?
2)正則表達式匹配?
3)郵件系統調用?
請注意設計思路和代碼規范
就這個問題我寫了一個Demo,代碼如下:
package org.zy.demo;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
?*
?* @author zhangyi
?* zhyiwww@163.com
?*
?* 從url里面讀取內容,然后分析,用正則表達式匹配,返回結果
?*/
/*
??? ?每5分鐘遍歷一下頁面(http://post.baidu.com/f?kw=%D2%EC%C8%CB%B0%C1%CA%C0%C2%BC),
??? 請統計頁面中"《"和"》"之間有多少個"異人"這兩個字,將這數值彈出一個alert并且發信給指定的郵件地址
??? 獲取頁面內所有地方的以"<< >>"為標示的這個符號代表書名號,獲取之中的內容
??? <<使用正則表達式>>
??? 功能點:
??? 1)URL抓取頁面
??? 2)正則表達式匹配
??? 3)郵件系統調用
?*/
public class ParseUrlContent {
???
???
??? public static void main(String[] args){
??? ??? Timer t = new Timer();
??? ??? t.schedule(new ParseTask(),0,5*60*60);??? ???
??? }
???
???
}
class ParseTask extends TimerTask{
??? public void run(){
??? ??? System.out.println("runing");
??? ??? try {
??? ??? ??? // create url object
??? ??? ??? URL url = new URL("http://post.baidu.com/f?kw=%D2%EC%C8%CB%B0%C1%CA%C0%C2%BC");
??? ??? ??? // get the input stream reader from the url
??? ??? ??? InputStreamReader isr = new InputStreamReader(url.openStream());
??? ??? ??? // buffered the reader
??? ??? ??? BufferedReader br = new BufferedReader(isr);
??? ??? ???
??? ??? ??? // store the temp string
??? ??? ??? StringBuffer sb = new StringBuffer(10000);
??? ??? ??? // temporary variable for each read
??? ??? ??? String tmp="";
??? ??? ???
??? ??? ??? // read the content from reader
??? ??? ??? while((tmp=br.readLine())!=null){
??? ??? ??? ??? sb.append(tmp);
??? ??? ??? }
??? ??? ??? System.out.println(sb.toString());
??? ??? ??? // match from the orginal string using? reglex express
??? ??? ??? Pattern p = Pattern.compile("<<.*異人.*>>");
??? ??? ??? Matcher m = p.matcher(sb.toString());????? ??
??? ??? ??? // 此處可以做進一步的處理
??? ??? ???
??? ??? ???
??? ??? ???
??? ??? } catch (MalformedURLException e) {
??? ??? ??? // TODO Auto-generated catch block
??? ??? ??? e.printStackTrace();
??? ??? } catch (IOException e) {
??? ??? ??? // TODO Auto-generated catch block
??? ??? ??? e.printStackTrace();
??? ??? }
??? }
}
實現思路:
1 從url讀取內容流
2 解析流,用正則表達式來匹配取出想要查找的內容
我沒有詳細的實現匹配的部分,其實,如果是要迭代的去遍歷內容里面所有的url,然后再解析也是可以實現的,就把上面的代碼封裝成一個方法parseUrl(URL url),然后,解析,迭代,就可以了。
這就是我的實現思路。