我的目标是获取下面提到的那个链接的“下一页”链接,直到获取到最后一个把所有的页面获取完毕。
我做了个方法就是
1. 提取页面链接
2. 找出“下一页”的链接
3. 把下一页链接存入链表
4. 调用这个函数自己
5. 直到遇到最后一页的链接的时候退出但是问题是:
1. 我操作链表的时候总是报错“Exception in thread "main" java.lang.NullPointerException
at WholePost.main(WholePost.java:61)”2. 在注释中的那个语句的目的是判断是不是最后一页了,但是实现不了啊~~ 结果不是我想要的,由于我第一次使用迭代,所有有点乱。请大家指教!
import java.io.IOException;
import java.util.LinkedList;import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;class WholePost {
public static LinkedList<String> pages; public void SaveNextPage(String address) throws IOException { Document doc = Jsoup.connect(address).get();
String html = doc.toString(); Parser parser = null;
NodeList nodeList = null;
NodeFilter filter = null;
try {
// 创建指定编码的Parser对象
parser = Parser.createParser(html, "GB18030");
// 创建一个接受标签A的过滤器
filter = new TagNameFilter("A");
// 过滤节点内容
nodeList = parser.extractAllNodesThatMatch(filter); for (int i = 0; i < nodeList.size(); i++) {
LinkTag tag = (LinkTag) nodeList.elementAt(i);
String name = tag.getLinkText();
// if(tag.getLink().equals("http://www.tianya.cn/publicforum/content/free/1/2644117.shtml"))
// return; if (name.equals("下一页")) {
System.out.print(tag.getLinkText() + "-->");
System.out.println(tag.getLink());
pages.addLast(tag.getText());
WholePost wp = new WholePost();
wp.SaveNextPage(tag.getLink()); }
}
} catch (ParserException e) {
e.printStackTrace();
}
} public static void main(String args[]) throws IOException {
WholePost wp = new WholePost();
wp
.SaveNextPage("http://www.tianya.cn/publicforum/content/free/1/2644117.shtml");
while (!pages.isEmpty()) {
System.out.println(WholePost.pages.pop());
}
}
}