购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 基于JsonPath的内容解析与提取

大部分情况下,我们可以通过网页跳转链接或JavaScript函数动态加载直接获取HTML网页内容。但是,个别网站会返回JSON结构数据,这时我们需要对JSON结构数据进行处理,从中解析和提取内容。

在大规模分布式爬虫程序中,我们可能会同时处理上万个网站。因此,找到一种便捷高效的JSON结构数据处理方式是十分必要的。

JsonPath是一种用于在JSON结构中定位和提取特定内容的查询语言,类似于XPath对XML文档的定位和提取功能。它让我们可以通过表达式配置的方式,从JSON数据中找到需要的内容。

JsonPath语法与XPath语法类似,因此,如果我们已经有了XPath表达式的编写经验,那么很快就可以掌握JsonPath表达式的语法规则。JsonPath的基础描述符如表2-5所示。

表2-5 JsonPath的基础描述符

接下来,我们通过一个简单的例子来演示如何使用JsonPath表达式从JSON结构数据中提取所需的内容。

假设网站接口请求返回的JSON结构数据如下:

     {
        "accessPath": null,
        "actionErrors": [],
        "actionMessages": [],
        "dataList": null,
        "dataMap": {
            "id": "20240312000000014551",
            "title": "文章标题",
            "tag": null,
            "content": "文章内容",
            "image": null,
            "url": null,
            "writeTime": "2024-03-12",
            "showcount": 851,
            "origin": null
        },
        "errorMessages": [],
        "errors": {},
        "fieldErrors": {},
        "locale": "zh_CN",
        "maid": null,
        "maidentify": null,
        "message": null,
        "oldPath": null,
        "page": "1",
        "pmaid": null,
        "state": null,
        "texts": null,
        "total": "0",
        "totalpage": "1"
     }

我们需要编写程序来获取文章的标题和内容信息。

针对这个需求,我们可以通过JsonPath表达式来实现。具体实现思路如下: cHqyOgqvZpCCdwqVrVMAOqEVry1KnbQjFTJRgi95LSEAuUR+TB+QvH5xqQ+O2T02

     import com.jayway.jsonpath.JsonPath;
     public class JsonPathExample {
         public static void main(String[] args) {
             // 利用JsonPath从上面的JSON结构数据中提取title和content
             String title = JsonPath.read(json, "$.dataMap.title");
             Double content = JsonPath.read(json, "$.dataMap.content");
             // 打印文章标题和内容
             System.out.println("Title: " + title);
             System.out.println("Content: " + content);
         }
     }
点击中间区域
呼出菜单
上一章
目录
下一章
×