private void trySaveParseResults(List<ParseResult> results) { CacheClient session = CommonUtils.getCacheClient(); int count = 0; try { for (int i = 0; i < results.size(); i++) { ParseResult result = results.get(i); try { if (!CommonUtils.checkUrl(session, result.getPage().getUrl())) { WebPage page = result.getPage(); String content = result.getContent(); // 保存文章到HBase文档服务器 try { if (SystemProps.storeable()) { CommonUtils.storage(true, page.getId(), content, true); } } catch (Exception e) { LOGGER.error("保存至文档服务器失败! : " + e.getMessage()); continue; } // 保存页面到sql数据库 // WebPageRepository.save(page); try { WebPageManager.getInstance().savePage(page); } catch (SQLException e) { LOGGER.error(e.getMessage() + "保存至sql数据库失败", e); continue; } catch (Exception e) { LOGGER.error(e.getMessage() + "保存至sql数据库失败", e); continue; } // 保存contentUrl,即AJAX的JSON数据的URL CommonUtils.storeUrl(session, page.getUrl()); count++; } } catch (Exception e) { LOGGER.error(e.getMessage(), e); } } } finally { LOGGER.info("存放爬取结果" + count + "条"); try { CommonUtils.recycleCacheClient(session); } catch (Exception e) { LOGGER.error(e.getMessage() + "释放cacheclient失败"); } } }
/** * 解析页面中的一项JSON数据,并包装到WebPage当中,并返回WebPage * * @param obj * @param session */ private ParseResult parsePage(JSONObject obj) { WebPage page = new WebPage(); String content = ""; String pageUrl = ""; try { // 每个页面的内容依然是ajax,这里得到的是JSON数据的URL String contentUrl = WangyiPageParser.getContentUrl(obj); pageUrl = WangyiPageParser.getPageUrl(obj); String title = obj.getString("title"); String webSite = "网易新闻"; JSONObject contentJSON = WangyiPageParser.getContentJSON(contentUrl); content = WangyiPageParser.getContent(contentJSON); Timestamp publishDate = WangyiPageParser.getPublishDate(contentJSON); // 不用自带的summary,截取content前200个字符获取summary String summary = WangyiPageParser.getSummary(content); // 如果content或者title为空,则不保存页面 if (content.equals("") || title.equals("") || title == null) { return null; } page.setTitle(title); page.setUrl(pageUrl); page.setWebSite(webSite); page.setDownloadDate(new Timestamp(System.currentTimeMillis())); page.setTitle(title); page.setSummary(summary); page.setPublishDate(publishDate); page.setType(1); page.setIndexedStatus(3); } catch (Exception e) { LOGGER.error("网易新闻页面信息提取失败!"); return null; } if (content.equals("") || content == null) return null; ParseResult res = new ParseResult(); res.setPage(page); res.setContent(content); return res; }