package util;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
* 说明:规则抓取2.0版本
* 用途:根据json规则 抓取指定网页的内容
* @author 旋律
* 2017 8 24
*/
public class JsonJsoupUtil2 {
/**
* 说明:json子节点中带有json 的解析方法
* @author 旋律
* 2017 8 18
*/
public List<List> toJsonIter(JSONObject jsonContent){
List<List> listAll = new ArrayList<List>();
Iterator iter = jsonContent.keys();
while(iter.hasNext()){
List list= new ArrayList();
// 获得key
String key = (String) iter.next();
// 根据key获得value, value也可以是JSONObject,JSONArray,使用对应的参数接收即可
try {
JSONObject valueJson = jsonContent.getJSONObject(key);
list.add(key);
list.add(valueJson);
listAll.add(list);
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
return listAll;
}
/**
* 说明:json子节点中不带有json 的解析方法
* @author 旋律
* 2017 8 18
*/
public List<List> toJsonStringIter(JSONObject jsonContent){
List<List> listAll = new ArrayList<List>();
Iterator iter = jsonContent.keys();
while(iter.hasNext()){
List list= new ArrayList();
// 获得key
String key = (String) iter.next();
// 根据key获得value, value也可以是JSONObject,JSONArray,使用对应的参数接收即可
try {
String valueJson = (String) jsonContent.get(key);
list.add(key);
list.add(valueJson);
listAll.add(list);
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
return listAll;
}
/**
* 说明:根据json解析html的main方法
* 参数1:url(支持直接传入html标签的字符串) 参数2:json规则的路径
* @author 旋律
* 2017 8 18
*/
public List<Map<String,String>> getHTMLListMap(String urlJsoup,String jsonName){
List<Map<String,String>> listMap =new ArrayList<Map<String,String>>();
try{
Document document = null;
//判断是url还是html标签
if(urlJsoup.substring(0,4).indexOf("http")!=-1){
document = Jsoup.connect(urlJsoup).get();
}else{
document = Jsoup.parse(urlJsoup);
}
String json = getJson(jsonName);
JSONObject jsonYuan = new JSONObject(json);
String htmlContent = (String) jsonYuan.get("HtmlContent"); //获得属性内容HtmlContent
String strArr[] = getKey(htmlContent,"=");
Object ojcet= getObject(document,strArr);
if(null == ojcet){
//为空直接返回
return null;
}else if(ojcet instanceof String){
//如果返回的是String则代表直接return
Map<String,String> map = new HashMap<String,String>();
map.put("HtmlContent", (String)ojcet);
}else if(ojcet instanceof Elements){
Element oelem = ((Elements) ojcet).get(0);
JSONObject itmJson = jsonYuan.getJSONObject("itm");//获得详细规则json
String itmKey = (String) itmJson.get("key");//解析键
String itmStrArr[] = getKey(itmKey,"=");
Object itmOjcet= getObject(oelem,itmStrArr);
if(itmOjcet instanceof Elements){
JSONObject jsonContent = itmJson.getJSONObject("content");//解析内容json
List<List> listAll = toJsonIter(jsonContent);
Elements els = (Elements) itmOjcet;//等待解析内容集合
for(int i =0;i<els.size();i++){
Map<String,String> map = new HashMap<String,String>();
Element el = els.get(i);
if(null != listAll&& listAll.size()>0){
for (List li : listAll) {//只有下标0和1
//li.get(0);//map 的 key
JSONObject listValJson = (JSONObject) li.get(1);
String id = (String) listValJson.get("id");
String itmIdArr[] = getKey(id,"=");
Object itmIdOjcet= getObject(el,itmIdArr);
Object elId =null;
if(itmIdOjcet instanceof Elements){
if(itmIdOjcet==null || ((Elements) itmIdOjcet).size()<=0){
map=null;
break;
}
elId = ((Elements) itmIdOjcet).get(0);
}else if(itmIdOjcet instanceof Element){
elId = (Element) itmIdOjcet;
}else {
map=null;
break;
}
List<List> listValAll = toJsonStringIter(listValJson);
if(null != listValAll&& listValAll.size()>0){
for(List lival : listValAll){
String keyA = (String) lival.get(0);
if(!"id".equals(keyA)){
String iterNoIdStrArr[] = getKey((String)lival.get(1),"=");
elId = getObject(elId,iterNoIdStrArr);
}
}
if(elId instanceof String){
if(null !=elId &&!"".equals(((String) elId).trim())){
map.put((String)li.get(0),(String)elId);
}
}
}
}
if(map!=null&&map.size()>0){
listMap.add(map);
}
}
}
}else if(itmOjcet instanceof Element){
JSONObject jsonContent = itmJson.getJSONObject("content");//解析内容json
List<List> listAll = toJsonIter(jsonContent);
Element el = (Element) itmOjcet;//等待解析内容集合
Map<String,String> map = new HashMap<String,String>();
if(null != listAll&& listAll.size()>0){
for (List li : listAll) {//只有下标0和1
//li.get(0);//map 的 key
JSONObject listValJson = (JSONObject) li.get(1);
String id = (String) listValJson.get("id");
String itmIdArr[] = getKey(id,"=");
Object itmIdOjcet= getObject(el,itmIdArr);
Object elId =null;
if(itmIdOjcet instanceof Elements){
if(itmIdOjcet==null || ((Elements) itmIdOjcet).size()<=0){
map=null;
break;
}
elId = ((Elements) itmIdOjcet).get(0);
}else if(itmIdOjcet instanceof Element){
elId = (Element) itmIdOjcet;
}else {
map=null;
break;
}
List<List> listValAll = toJsonStringIter(listValJson);
if(null != listValAll&& listValAll.size()>0){
for(List lival : listValAll){
String keyA = (String) lival.get(0);
if(!"id".equals(keyA)){
String iterNoIdStrArr[] = getKey((String)lival.get(1),"=");
elId = getObject(elId,iterNoIdStrArr);
}
}
if(elId instanceof String){
if(null !=elId &&!"".equals(((String) elId).trim())){
map.put((String)li.get(0),(String)elId);
}
}
}
}
if(map!=null&&map.size()>0){
listMap.add(map);
}
}
}
return listMap;
}else if(ojcet instanceof Element){
//开始在此区域进行下一步解析
//开始在此区域进行下一步解析
JSONObject itmJson = jsonYuan.getJSONObject("itm");//获得详细规则json
String itmKey = (String) itmJson.get("key");//解析键
String itmStrArr[] = getKey(itmKey,"=");
Object itmOjcet= getObject(ojcet,itmStrArr);
if(itmOjcet instanceof Elements){
JSONObject jsonContent = itmJson.getJSONObject("content");//解析内容json
List<List> listAll = toJsonIter(jsonContent);
Elements els = (Elements) itmOjcet;//等待解析内容集合
for(int i =0;i<els.size();i++){
Map<String,String> map = new HashMap<String,String>();
Element el = els.get(i);
if(null != listAll&& listAll.size()>0){
for (List li : listAll) {//只有下标0和1
//li.get(0);//map 的 key
JSONObject listValJson = (JSONObject) li.get(1);
String id = (String) listValJson.get("id");
String itmIdArr[]
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
java规则抓取网页.zip (23个子文件)
Jsoup-json
bin
action
WeiboMain.class 2KB
json
baidu2.json 676B
weibo2.json 762B
sina2.json 622B
json规则说明 3KB
util
JsonJsoupUtil2.class 14KB
jar
json-20090211.jar 45KB
json.jar 92KB
json4s-jackson_2.11-3.2.11.jar 39KB
jsoup-1.10.3.jar 347KB
json-lib-2.4-jdk15.jar 155KB
json4s-ast_2.11-3.2.11.jar 80KB
json4s-core_2.11-3.2.11.jar 576KB
.settings
org.eclipse.core.resources.prefs 57B
org.eclipse.jdt.core.prefs 598B
src
action
WeiboMain.java 1KB
json
baidu2.json 676B
weibo2.json 762B
sina2.json 622B
json规则说明 3KB
util
JsonJsoupUtil2.java 19KB
.project 386B
.classpath 748B
共 23 条
- 1
资源评论
叮咚呛咚呛
- 粉丝: 5
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功