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">hm-changed@apnic.net 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”。

 

相关源码下载

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值