/** * 根据ajax请求链接爬取内容 解析流程是:从rawUrl拼接上城市和limit组成一个原始页面的ajax请求url,获取内容解析成JSONArray, * array中的一项包含有title,和url_163属性("/docs/10/2015052804/AQM4VA369001VA37.html") * 和rawPageUrl:"http://j.news.163.com"拼接后得到访问的页面 我们在url缓存,存入mysql以及HBase的url都是这个pageUrl * docID("AQM4VA369001VA37"),利用docID填充入rawContentUrl * :"http://j.news.163.com/hy/doc.s?info=2&type=10&hash=&docid=%s" 组成一条新闻的ajax请求,请求返回的是一个json字符串 * 解析之后,得到contentJSON,根据这个数据得到里面的content,publish_date字段 * * @param url 从createUrl中获取到的拼接好的字符串,这是一条某城市新闻的ajax请求页面 * @author BAO */ private void craw(String url, List<ParseResult> list) { String html = null; try { html = WangyiPageParser.getHtmlFromUrl(url); } catch (BaseHttpException e1) { LOGGER.error(e1.getMessage() + "获取AJAX页面失败", e1); return; } // 解析ajax请求主页的json,如果失败就直接返回 JSONArray array = null; try { array = JSONArray.parseArray(html); } catch (Exception e) { LOGGER.error(e.getMessage() + "页面JSON解析失败", e); return; } for (int i = 0; i < array.size(); i++) { JSONObject obj = null; try { obj = array.getJSONObject(i); } catch (Exception e) { LOGGER.error(e.getMessage() + "JSON内容获取失败", e); } // 如果obj为null,就跳过 if (obj == null) continue; ParseResult result = parsePage(obj); if (result != null) { list.add(result); } if (!SystemProps.isTest()) { TimerUtils.delayForSeconds(2); } } }