java 实现百度贴吧“只看楼主”

本文介绍了如何使用Java实现百度贴吧的‘只看楼主’功能。主要步骤包括解析帖子URL获取HTML,利用Jsoup库提取HTML中class为'p_author_name'的楼主用户名,以及class为'p_postlist'的帖子内容。通过遍历class为'l_post'的回复并判断是否存在下一页,最终将内容保存为book.html。需要注意保存后的HTML可能需要CSS排版整理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个功能主要是:先确定帖子的地址,然后获取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();
		}
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值