コード例 #1
0
  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失败");
      }
    }
  }
コード例 #2
0
  /**
   * 解析页面中的一项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;
  }