利用URL对象和正则表达式、Pattern实现网络爬虫的功能。什么是网络爬虫?网络爬虫又叫蜘蛛,网络蜘蛛是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。所以要想抓取网络上的数据,不仅需要爬虫程序还需要一个可以接受”爬虫“发回的数据并进行处理过滤的服务器,爬虫抓取的数据量越大,对服务器的性能要求则越高。

   现在我们可以根据这种原理,写一个简单的网络爬虫程序 ,该程序实现的功能是获取网站发回的数据,并提取之中的网址,获取的网址我们存放在一个文件夹中,关于如何就从网站获取的网址进一步循环下去获取数据并提取其中其他数据这里就不在写了,只是模拟最简单的一个原理则可以,实际的网站爬虫远比这里复杂多,深入讨论就太多了。除了提取网址,我们还可以提取其他各种我们想要的信息,只要修改过滤数据的表达式则可以。

以下是利用Java模拟的一个程序,提取新浪页面上的链接,存放在一个文件里。

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package txt.regex;
import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WebSpider {
public static void main(String[] args) {
URL url = null ;
URLConnection urlconn = null ;
BufferedReader br = null ;
PrintWriter pw = null ;
String regex = "http://[\\w+\\.?/?]+\\.[A-Za-z]+" ;    
Pattern p = Pattern.compile(regex);
try {
url = new URL( "http://www.sina.com.cn/" );
urlconn = url.openConnection();
pw = new PrintWriter( new FileWriter( "url.txt" ), true );
br = new BufferedReader( new InputStreamReader(urlconn.getInputStream()));
String buf = null ;
while ((buf = br.readLine()) != null ) {
Matcher buf_m = p.matcher(buf);
while (buf_m.find()) {
pw.println(buf_m.group());
}    
}
System.out.println( "获取结束!" );
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
pw.close();
}
}
}

运行程序后查看“url.txt”文件夹,发现提取了很多网址: