今天下午写了个网络蜘蛛程序,当抓取几个页面的时候,程序运行得很正常, 但是当抓取整个网站的时候,程序就会报内存溢出。下面是我的程序代码
public class MySelfInfo {
//存取抓取到的公司地址
public static ArrayList<String> companyMan=new ArrayList<String>();
public static void getRowBykeyword(String url,String keyword){
try {
//抓取我的关键字
Parser parser=new Parser(url);
TagNameFilter filter=new TagNameFilter("tr");
NodeList nodelist=parser.extractAllNodesThatMatch(filter); //每次都是这里报内存溢出
for(Node node : nodelist.toNodeArray()){
if(node instanceof TableRow){
TableRow row=(TableRow)node;
TableColumn[] columns=row.getColumns();
if(columns[0].toPlainTextString().trim().startsWith(keyword)){
companyMan.add(columns[1].toPlainTextString().trim());
}
}
}
//拿到超链接进行递归
Parser parserlink=new Parser(url);
TagNameFilter linkfilter=new TagNameFilter("a");
NodeList linklist=parserlink.extractAllNodesThatMatch(linkfilter);
for(Node node : linklist.toNodeArray()){
LinkTag linktag=(LinkTag)node;
//递归
getRowBykeyword(linktag.getLink(),keyword); }
} catch (ParserException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
getRowBykeyword("http://china.alibaba.com/","公司地址");
}}
public class MySelfInfo {
//存取抓取到的公司地址
public static ArrayList<String> companyMan=new ArrayList<String>();
public static void getRowBykeyword(String url,String keyword){
try {
//抓取我的关键字
Parser parser=new Parser(url);
TagNameFilter filter=new TagNameFilter("tr");
NodeList nodelist=parser.extractAllNodesThatMatch(filter); //每次都是这里报内存溢出
for(Node node : nodelist.toNodeArray()){
if(node instanceof TableRow){
TableRow row=(TableRow)node;
TableColumn[] columns=row.getColumns();
if(columns[0].toPlainTextString().trim().startsWith(keyword)){
companyMan.add(columns[1].toPlainTextString().trim());
}
}
}
//拿到超链接进行递归
Parser parserlink=new Parser(url);
TagNameFilter linkfilter=new TagNameFilter("a");
NodeList linklist=parserlink.extractAllNodesThatMatch(linkfilter);
for(Node node : linklist.toNodeArray()){
LinkTag linktag=(LinkTag)node;
//递归
getRowBykeyword(linktag.getLink(),keyword); }
} catch (ParserException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
getRowBykeyword("http://china.alibaba.com/","公司地址");
}}
at java.util.Vector.<init>(Vector.java:111)
at java.util.Vector.<init>(Vector.java:124)
at java.util.Vector.<init>(Vector.java:133)
at org.htmlparser.lexer.Lexer.parseTag(Lexer.java:1002)
at org.htmlparser.lexer.Lexer.nextNode(Lexer.java:368)
at org.htmlparser.scanners.CompositeTagScanner.scan(CompositeTagScanner.java:110)
at org.htmlparser.util.IteratorImpl.nextNode(IteratorImpl.java:91)
at org.htmlparser.Parser.extractAllNodesThatMatch(Parser.java:767)
at ParserInfor.MySelfInfo.fillLinkQuen(MySelfInfo.java:85)
at ParserInfor.MySelfInfo.fillLinkQuen(MySelfInfo.java:99)
at ParserInfor.MySelfInfo.fillLinkQuen(MySelfInfo.java:99)
您具体是怎么样做的,是自己写socket,自己解析吗?