HTMLでJSONに一致する正規表現

HTMLでJSONに一致する正規表現

したがって、JSON-HTML Webページ次のパターンで行のみをフィルタリングしたいと思います。

"realname": "SOME_VALUE_COMES_HERE",

私はこれを試しました:

curl https://www.mediawiki.org/w/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&formatversion=2 -s |
  grep -oP '"realname": "[A-Za-z0-9]*",' |
  sort -u > special_page_names.txt

ファイルが作成されましたが空です。私はコマンドで何を間違っていますかgrep -oP

修正する

私はそれを使用せずにjqインストールできますが、「すべての基本」アプローチを好む。

答え1

ウェブサイトでは、format=json次のオプションを提供していますjq

curl 'https://www.mediawiki.org/w/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&formatversion=2&format=json' \
| jq -r '.query | .specialpagealiases[].realname'

答え2

まず、シェルがプロセスをバックグラウンドに置くコマンドで "&"を解釈しないように、URLを引用符で囲む必要があります。

次に、curlコマンドはJSONを返しません。印刷時にJSONの外観を表すHTMLを返します。しかし、上部にはこれを使って&format=json実際のJSONを得ることができます。

次に、JSONのインポートに使用すると&format=json印刷がうまくいかないため、「:」の後のスペースを削除する必要があります。

curl 'https://www.mediawiki.org/w/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&format=json' -s | grep -oP '"realname":"[A-Za-z0-9]*",' | sort -u > special_page_names.txt 

"realname":結果の周囲の引用符と末尾のコンマを削除するには、次のようにします。

curl 'https://www.mediawiki.org/w/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&format=json' -s | grep -oP '"realname":"[A-Za-z0-9]*",' | sed -E 's/"realname":"([A-Za-z0-9]*)",/\1/' | sort -u > special_page_names.txt 

これは迅速で汚れた方法でのみ使用してください。強力なものが必要な場合は、実際のJSONパーサーを使用するか、少なくともjq

答え3

Pythonはここで最も簡単な解決策です。

スクリプト

import sys
import requests


url = sys.argv[1]
response = requests.get(url)
if response:
    if not response.ok:
        print('Bad response: {0!r}'.format(response))
        sys.exit(1)
    else:
        data = response.json()
        query = data.get("query", None)
        if query:
            special_page_aliases = query.get("specialpagealiases", None)
            if special_page_aliases:
                for spa in special_page_aliases:
                    real_name = spa.get("realname", None)
                    if real_name:
                        print(spa.get("realname"))
    sys.exit(0)
print('Bad request')
sys.exit(1)

使用法

python script.py "https://www.mediawiki.org/w/api.php?action=query&meta=siteinfo&siprop=specialpagealiases&format=json"

このスクリプトは、「query.specialpagealiases」キーの下のすべての「realname」値をコンソールにダンプします。

編集する:OPがローカルソリューションを探していることを知っています。私はPythonをあらかじめ指摘したいと思いました。はい今地元の人。

関連情報