java實現網絡爬蟲--抓取網站數據

接到需求大致意思是:批量查詢IP地址歸屬地,要求給指定IP去指定網站(“中國互聯網絡信息中心”,網址http://www.cnnic.net.cn/)查詢並獲取查詢結果的某幾項數據。

實現過程中學到最多的就是正則表達式,本次用到的正則表達式如下: 

String regwlmc = "網絡名稱\\:</font>\\s*</td>\\s*<[^>]+?>\\s*<[^>]+?>([^<]+?) </font>";


該段對應網站源碼如下:

 

 <table border="1" cellspacing="0" cellpadding="2">
        
            <tr>
                <td align="left" class="t_blue"><font size="2">IPv4地址段:</font></td>
                <td align="left" class="t_blue"><font size="2">192.168.0.0 - 192.168.255.255 </font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">網絡名稱:</font></td>
                <td align="left" class="t_blue"><font size="2">IANA-NETBLOCK-192 </font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">單位描述:</font></td>
                <td align="left" class="t_blue"><font size="2">This network range is not allocated to APNIC. </font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">單位描述:</font></td>
                <td align="left" class="t_blue"><font size="2">descr: </font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">單位描述:</font></td>
                <td align="left" class="t_blue"><font size="2">This block is reserved for private internets </font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">單位描述:</font></td>
                <td align="left" class="t_blue"><font size="2">Please refer to RFC 1918 <http://www.ietf.org/rfc/rfc1918.txt> </font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">單位描述:</font></td>
                <td align="left" class="t_blue"><font size="2">for more information. </font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">單位描述:</font></td>
                <td align="left" class="t_blue"><font size="2">descr: </font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">國家代碼:</font></td>
                <td align="left" class="t_blue"><font size="2">AU </font></td>
            </tr>
            <tr>
                <td align="left" class="t_blue"><font size="2">修改記錄:</font></td>
                <td align="left" class="t_blue"><font size="2">[email protected] 20111206&nbsp;</font></td>
            </tr>
        
            <tr>
                <td align="left" class="t_blue"><font size="2">數據來源:</font></td>
                <td align="left" class="t_blue"><font size="2">APNIC&nbsp;</font></td>
            </tr>
            <tr>
                <td align="left" class="t_blue"><font size="2"></font></td>
                <td align="left" class="t_blue"><font size="2"> </font></td>
            </tr>
        
    </table>


正則表達式含義是要取:

 	   <tr>
                <td align="left" class="t_blue"><font size="2">網絡名稱:</font></td>
                <td align="left" class="t_blue"><font size="2"><span style="color:#ff0000;">IANA-NETBLOCK-192 </span></font></td>
            </tr>


這一段代碼中的標紅部分的內容。

正則表達式分析如下:

網絡名稱\\:</font>\\s*</td>\\s*<[^>]+?>\\s*<[^>]+?>([^<]+?) </font>

其中正則表達式中用到的符號及含義如下:

\s  表示“空格字符(空格鍵, tab, 換行, 換頁, 回車)”

*   表示“重複零次或更多次”

^  表示“ 一行的開始”

?  表示“重複零次或一次”

[ ]  表示“匹配方括號內的一個字符”

將以上正則表達式翻譯如下:以“網絡名稱:</font>”開頭,中間間隔多個“空格字符(空格鍵, tab, 換行, 換頁, 回車)”後有一個</td>標籤,然後再剪個多個“空格字符(空格鍵, tab, 換行, 換頁, 回車)”,然後中間間隔兩個以“>”開頭的語句後且在以“<”開頭的語句之間的內容即爲需要獲取的信息,即“IANA-NETBLOCK-192”。

 

相關源碼下載

 

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