Bash - 如何从网页中提取JSON?

时间:2018-04-26 17:28:33

标签: json bash

我正在尝试从此网址中提取JSON:here

我想要的输出就像这个https://pastebin.com/BVzUrk6s。由于StackOverFlow字符限制,我无法将其粘贴到此处。

以下是我的尝试:

curl 'https://www.lazada.co.id/-i160040703-s181911730.html?spm=a2o4j.order_details.details_title.1.52ec6664luQAQs&urlFlag=true&mp=1' | grep -Poz '(?<=app.run\()(.*\n)*.*(?=\);)'

但该命令仍然无法提取JSON数据。我该如何解决这个问题?我希望使用纯bash脚本而不安装任何程序来执行此操作。

1 个答案:

答案 0 :(得分:0)

以这种方式尝试JSON解析是一个坏主意(TM)。

无论如何,找出可能的东西似乎是一个好主意(TM)。

#!/bin/bash

function parseUrl() {
    local url=$1
    echo '"childCategories": ['
    curl --silent ${url} \
        | awk '/<script type="text" class=J_data/ { show=1 } show; /<\/script>/ { show=0 }' \
        | egrep -v "script" \
        | sed -e 's/]//g' -e 's/\[//g' -e 's/{"childCategoryName":"","childCategoryUrl":""},//g' -e 's/}$/},/g' \
        | sed -e 's/,{/,\'$'\n{/g' -e 's/^[ ]*//g' -e 's/{/    {/g' \
        | sed -e 's/childCategoryName/name/g' -e 's/childCategoryUrl/url/g'
    echo ' ]'
}

parseUrl 'https://www.lazada.co.id/-i160040703-s181911730.html?spm=a2o4j.order_details.details_title.1.52ec6664luQAQs&urlFlag=true&mp=1' \
    | tee /tmp/extracted.json

所以你去:curl,awk,egrep,sed。使用风险自负。

  1. 这样的代码不可扩展,这意味着您无法轻松提取嵌套的JSON。
  2. 它非常脆弱,这意味着如果有人改变了布局甚至是CSS,那就是它的再见数据提取。