您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

零基础写Java知乎爬虫之抓取知乎答案(2)

2024/4/13 17:04:01发布12次查看
zhihu.java
import java.util.arraylist; import java.util.regex.matcher; import java.util.regex.pattern; public class zhihu { public string question;// 问题 public string questiondescription;// 问题描述 public string zhihuurl;// 网页链接 public arraylist<string> answers;// 存储所有回答的数组 // 构造方法初始化数据 public zhihu(string url) { // 初始化属性 question = ""; questiondescription = ""; zhihuurl = ""; answers = new arraylist<string>(); // 判断url是否合法 if (getrealurl(url)) { system.out.println("正在抓取" + zhihuurl); // 根据url获取该问答的细节 string content = spider.sendget(zhihuurl); pattern pattern; matcher matcher; // 匹配标题 pattern = pattern.compile("zh-question-title.+?<h2.+?>(.+?)</h2>"); matcher = pattern.matcher(content); if (matcher.find()) { question = matcher.group(1); } // 匹配描述 pattern = pattern .compile("zh-question-detail.+?<div.+?>(.*?)</div>"); matcher = pattern.matcher(content); if (matcher.find()) { questiondescription = matcher.group(1); } // 匹配答案 pattern = pattern.compile("/answer/content.+?<div.+?>(.*?)</div>"); matcher = pattern.matcher(content); boolean isfind = matcher.find(); while (isfind) { answers.add(matcher.group(1)); isfind = matcher.find(); } } } // 根据自己的url抓取自己的问题和描述和答案 public boolean getall() { return true; } // 处理url boolean getrealurl(string url) { // 将http://www.zhihu.com/question/22355264/answer/21102139 // 转化成http://www.zhihu.com/question/22355264 // 否则不变 pattern pattern = pattern.compile("question/(.*?)/"); matcher matcher = pattern.matcher(url); if (matcher.find()) { zhihuurl = "http://www.zhihu.com/question/" + matcher.group(1); } else { return false; } return true; } @override public string tostring() { return "问题:" + question + "\n" + "描述:" + questiondescription + "\n" + "链接:" + zhihuurl + "\n回答:" + answers.size() + "\n"; } }
spider.java
import java.io.bufferedreader; import java.io.inputstreamreader; import java.net.url; import java.net.urlconnection; import java.util.arraylist; import java.util.regex.matcher; import java.util.regex.pattern; public class spider { static string sendget(string url) { // 定义一个字符串用来存储网页内容 string result = ""; // 定义一个缓冲字符输入流 bufferedreader in = null; try { // 将string转成url对象 url realurl = new url(url); // 初始化一个链接到那个url的连接 urlconnection connection = realurl.openconnection(); // 开始实际的连接 connection.connect(); // 初始化 bufferedreader输入流来读取url的响应 in = new bufferedreader(new inputstreamreader( connection.getinputstream(), "utf-8")); // 用来临时存储抓取到的每一行的数据 string line; while ((line = in.readline()) != null) { // 遍历抓取到的每一行并将其存储到result里面 result += line; } } catch (exception e) { system.out.println("发送get请求出现异常!" + e); e.printstacktrace(); } // 使用finally来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (exception e2) { e2.printstacktrace(); } } return result; } // 获取所有的编辑推荐的知乎内容 static arraylist<zhihu> getrecommendations(string content) { // 预定义一个arraylist来存储结果 arraylist<zhihu> results = new arraylist<zhihu>(); // 用来匹配url,也就是问题的链接 pattern pattern = pattern .compile("<h2>.+?question_link.+?href=\"(.+?)\".+?</h2>"); matcher matcher = pattern.matcher(content); // 是否存在匹配成功的对象 boolean isfind = matcher.find(); while (isfind) { // 定义一个知乎对象来存储抓取到的信息 zhihu zhihutemp = new zhihu(matcher.group(1)); // 添加成功匹配的结果 results.add(zhihutemp); // 继续查找下一个匹配对象 isfind = matcher.find(); } return results; } }
以上就是零基础写java知乎爬虫之抓取知乎答案(2) 的内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product