用多线程实现的 Java 爬虫程序
2008-10-23 14:45
用多线程实现的
Java
爬虫程序
以下是一个 Java 爬虫程序,它能从指定主页开始,按照指定的深度抓取该站点域名下的网
页并维护简单索引。
参数:private static int webDepth = 2;//爬虫深度。主页的深度为 1,设置深度后超过
该深度的网页不会抓取。
private int intThreadNum = 10;//线程数。开启的线程数。
抓取时也会在程序源文件目录下生成一个 report.txt 文件记录爬虫的运行情况,并在抓取结束
后生成一个 leindex.txt 文件维护网页文件索引。
本程序用到了多线程(静态变量和同步),泛型,文件操作,URL 类和连接,Hashtable 类关联
数组,正则表达式及其相关类。运行时需使用命令行参数,第一个参数应使用 http://开头的
有效 URL 字符串作为爬虫的主页,第二个参数(可选)应输入可转换为 int 型的字符串(用
Integer.parseInt(String s)静态方法可以转换的字符串,如 3)作为爬虫深度,如果没有,则默
认深度为 2。
本程序的不足之处是:只考虑了 href= href=' href="后加绝对 url 的这三种情况(由于 url 地址
在网页源文件中情况比较复杂,有时处理也会出现错误),还有相对 url 和 window.open('的情
况没有考虑。异常处理程序也只是简单处理。如果读者有改进办法可以把源代码帖出,不胜
感激。
附上源代码如下(保存名为 GetWeb.java):
import java.io.File;
import java.io.Bu#eredReader;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Hashtable;
public class GetWeb {
- 1
- 2
- 3
- 4
- 5
- 6
前往页