HTML에서 JSON과 일치하는 정규식

HTML에서 JSON과 일치하는 정규식

따라서JSON-HTML 웹페이지다음 패턴으로 행만 필터링하고 싶습니다.

"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을 따옴표로 묶어야 합니다.

다음으로, 컬 명령은 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을 미리 지적하고 싶었습니다.이제 현지인.

관련 정보