抓取html页面中的json数据

来源:互联网 发布:windows找不到文件c 编辑:程序博客网 时间:2024/05/21 17:23

遇见问题:

在开发爬虫时,我们有时需要抓取页面中的ajax的json数据。


解决方案:

采用正则表达式,高端大气上档次,重点是简洁,举个栗子:


html页面:

上面省去N行。。。。var userLogin = function(){var jsonBean = {    number:"177***7495",    intLoginType:"4",    areaCode:"0471",    isBusinessCustType:"N",    identifyType:"B",    userLoginType:"4",    password:"",    randomPass:"",    noCheck:"N",    isSSOLogin:"Y",    sRand:"SSOLogin"    };下面省去N行。。。。

正则抓取数据:

public static void praseStr() {        String html = Models.readTxtFile("E:\\tmpTxt\\test0703.html");        String any ="[\\s\\S]*" ;//任何东西        StringBuffer regex = new StringBuffer("");        regex.append("(number.*)").append(any);//目标字段,下同        regex.append("(intLoginType.*)").append(any);        regex.append("(areaCode.*)").append(any);        regex.append("(isBusinessCustType.*)").append(any);        regex.append("(identifyType.*)").append(any);        regex.append("(userLoginType.*)").append(any);        regex.append("(password.*)").append(any);        regex.append("(randomPass.*)").append(any);        regex.append("(noCheck.*)").append(any);        regex.append("(isSSOLogin.*)").append(any);        regex.append("(sRand.*)").append(any);        Pattern p = Pattern.compile(regex.toString());        Matcher m = p.matcher(html);        int countAll = m.groupCount();        StringBuffer json = new StringBuffer("{");        if(m.find())        for (int i=1;i<=countAll;i++){            json.append(m.group(i)) ;        }        System.out.println(json.append("}").toString() );           }

抓取结果:

{number:"177***7495",intLoginType:"4",areaCode:"0471",isBusinessCustType:"N",identifyType:"B",userLoginType:"4",password:"",randomPass:"",noCheck:"N",isSSOLogin:"Y",sRand:"SSOLogin"}