java 爬蟲中的正則表達式(筆記)

    最近在寫一個爬蟲的小程序,編程語言爲Java,過程中遇到許多的小問題,打算把這些問題及解決方法都記下來。

    今天寫第一更,我們往往感興趣的是網頁裏邊的內容,在我們抓取到網頁的時候,真正需要的是抓取網頁裏邊和主題相關的內容。

    Java爬蟲在抓取網頁內容時,經常遇到的使用正則表達式來有選擇性的抓取網頁的內容。正則表達式在計算機科學中,是指一個用來描述或者符合某個句法規則的字符串的單個字符串。正則表達式在大多數情況下,被用來檢索和/或替換那些符合某個模式的文本內容。許多程序設計語言都支持利用正則表達式進行字符串的操作。

    

    正則表達式在網絡爬蟲中,主要的應用:

        1.對URL鏈接進行發過濾,只提取符合特定格式的鏈接;

        2.提取網頁內容。


    對於正則表達式的數學原理我就不在這裏贅述了。。。。。


    Java正則表達式:在JDK1.4以後java.util.regex包提供了對正則表達式的支持(好像是這個樣子的),在爬蟲常用的查找指定內容、去除指定內容、文字替換、截取等功能會比較常用(下面來舉例一一說明):

    查找:

        Pattern pattern=Pattern.compile("Java.*");//查找以Java開頭,任意字符結尾的字符串

Matcher matcher=pattern.matcher("Java是一種編程語言");

boolean b=matcher.matches();

System.out.println(b);


    多條件分割字符串:

        Pattern pattern=Pattern.compile("[,|]+");

String[] strs=pattern.split("Java Hello World Java ,Hello,,World|Sun");

for (int i=0;i<strs.length;i++){

        System.out.println(strs[i]);

    

    文字替換(首次出現字符):

        Pattern pattern =Pattern.compile("正則表達式");

        Matcher matcher=pattern.matcher("正則表達式 hello worle 正則表達式 hello world!!");

        System.out.println(matcher.replaceFirst("Java"));//替換掉第一次出現的字符串

    文字替換(全部):

        Pattern pattern =Pattern.compile("正則表達式");

        Matcher matcher=pattern.matcher("正則表達式 hello worle 正則表達式 hello world!!");

        System.out.println(matcher.replaceAll("Java"));//替換掉所有出現的字符串


    文字替換(置換字符):

        Pattern pattern =Pattern.compile("正則表達式");

        Matcher matcher=pattern.matcher("正則表達式 hello worle 正則表達式 hello world!!");

        StringBuffer sbr=new StringBuffer();

        while(matcher.find()){

            matcher.appendRepalcement(sbr,"Java");

        }

        matcher.appendTail(sbr);

        System.out.println(sbr.toString());


//appendReplacement()與appendAll()的區別:前者是一次性找到需要替換的再一次性全部替換,後者是找到一個替換一個。。。。


    驗證是否爲郵件地址:

        String str="[email protected]";

        Pattern pattern=Pattern.compile("[\\w\\.\\-]+@([\\w\\-])+[\\w\\-                                                              ]+"Pattern.CASE_INSENSITIVE);

        Matcher matcher=pattern.matcher(str);

        System.out.println(matcher.matcher());


    去除html標記:

        Pattern pattern=Pattern.compile("<.+?>",Pattern.DOTALL);

        Matcher matcher =pattern.matcher("<a href=\"index.html\">主頁</a>");

        String string=matcher.replaceAll("");

        System.out.println(string);


    截取http://地址:

        Pattern pattern=Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");

Matcher matcher=pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");

StringBuffer buffer=new StringBuffer();

while(matcher.find()){

buffer.append(matcher.group());

buffer.append("\r\n");

                 System.out.println(buffer.toString());

}


    查找HTML中對應條件字符串:

        Pattern pattern=Pattern.compile("href=\"(.+?)\"");

Matcher matcher=pattern.matcher("<a href=\"index.html\">主頁</a>");

while(matcher.find()){

System.out.println(matcher.group());

}

        

    替換{}中的文字

        String str="Java目前的發展史是由{0}年到{3}年";

String[][] object={new String[] {"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};

public static String replace(String sourceString,Object[] object){

String temp=sourceString;

for(int i=0;i<object.length;i++){

String[] result=(String[])object[i];

Pattern pattern=Pattern.compile(result[0]);

Matcher matcher=pattern.matcher(temp);

temp=matcher.replaceAll(result[1]);

}

return temp;

}

System.out.println(replace(str,object));

  還有 。。。。。。。。。。。。。。

以正則表達式查詢制定目錄下的文件。。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章