这个功能主要是:先确定帖子的地址,然后获取html代码, 通过jsoup解析html, 然后把楼主发的提取出来保存到book.html
除了jsoup的使用, 更多的是要看贴吧帖子的大体结构:
1、先解析出楼主的用户名:
差看html代码可以知道用户名是在class="p_author_name" 的div里, 楼主当然是第一个,所以:
String lz = doc.getElementsByClass("p_author_name").get(0).html();
2、发现回复的主体是在 class="p_postlist"这个div里面的, 先把这个提取出来Element e = doc.getElementsByClass("p_postlist").get(0);
3、把每一个回复 class="l_post"取出来, 然后遍历
Elements es = e.getElementsByClass("l_post");// 把每一个记录取出来
for (Element tmp : es) {// 遍历
if (lz.equals(tmp.getElementsByClass("p_author_name")
.html())) {//如果是楼主就保存起来
String html = tmp.getElementsByClass("d_content").get(0).html();
html = html.replaceAll("<img[\\d\\D]+/>", "[图片]");
sb.append(html);
}
}
4、判断帖子是否已经到尾页
每个帖子里面都有两条分页, 取出任意一条, 判断是否包含“下一页”, 如果没了, 就是到最后了
5、最后保存起来
因为我们只提取了div里面的内容, 所以保存完有点乱,可以自己先写个css进行排版后在保存
完整的代码:
private void see(String url) {
try {
int page = 0;
StringBuffer sb = new StringBuffer();
Document doc = Jsoup.connect(url).get();
String lz = doc.getElementsByClass("p_author_name").get(0).html();// 获取第一个用户的用户名,即楼主
Elements posts = null;
do {
Element e = doc.getElementsByClass("p_postlist").get(0);// 获取内容div
Elements es = e.getElementsByClass("l_post");// 把每一个记录取出来
for (Element tmp : es) {// 遍历
if (lz.equals(tmp.getElementsByClass("p_author_name")
.html())) {
String html = tmp.getElementsByClass("d_content").get(0).html();
html = html.replaceAll("<img[\\d\\D]+/>", "[图片]");
sb.append(html);
}
}
// 获取分页, 一共有2个
posts = doc.getElementsByClass("l_thread_info");
page++;
doc = Jsoup.connect(url + page).get();
} while (posts.html().contains("下一页"));
FileOutputStream fos = new FileOutputStream(
new File("d:/book.html"));
fos.write(sb.toString().getBytes());
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}