您的位置:首页 > 理论基础 > 计算机网络

java实现网络爬虫--抓取网站数据

2014-05-05 14:36 871 查看
接到需求大致意思是:批量查询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 </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 </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”。

相关源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: