0
mwparserfromhell
を使用してWikiMediaテキストを解析しています。mwparserfromhellの次のノードを取得する
ページから場所を取得する必要があります。例えばとして
私はAPI (Wiki Link)を使用して、ミュリエルを照会するとき、私はfilter_headings()
により解析した後、すべての見出しを取得することができています。今私は見出しの下にコンテンツを取得する必要があります。
見出し(「場所」)は取得できますが、コンテンツはどのように取得できますか?
ここにコードがあります。どんな助けもありがとう。 MediaWikiの構文で
import mwparserfromhell
import urllib.request
import urllib.parse
import json
def main():
search('muriel')
def search(name):
wiki_parsed = get_json(name, True)
headings = wiki_parsed.filter_headings()
filtered_headings = [heading
for heading in headings
if heading.title == 'Places']
if len(filtered_headings) > 0:
print(filtered_headings[0])
# ===================================
# need to get the content inside heading
#
# ?????????????????????????????????????
def get_json(name, ignore_cache=False):
url = 'https://en.wikipedia.org/w/api.php'
args = {'action': 'query',
'titles': name,
'prop': 'revisions',
'rvprop': 'content',
'format': 'json'}
content = get_url_content(url, args)
data = json.loads(content)
wiki_text = (list(data['query']['pages'].values())[
0]['revisions'][0]['*'])
parsed = mwparserfromhell.parse(wiki_text)
return parsed
def get_url_content(url, req_params):
url = url + '?' + urllib.parse.urlencode(req_params)
fp = urllib.request.urlopen(url)
str_content = fp.read().decode('utf-8', 'ignore')
fp.close()
return str_content
if __name__ == "__main__":
main()
私はチェックしました。はい、 'Heading'ノードの中に子供はいません。どのように次のノードを取得するには?または兄弟ノード?出来ますか? – sam
もちろん、 'wiki_parsed.nodes [wiki_parsed.nodes.index(filtered_headings [0])+ 1)'などです。しかし、私が説明したように、それは必ずしもあなたが期待するものを意味するとは限りません。 – Tgr
'mwparserfromhell'はネストされたセクションをとにかく扱うことができないようです。 – Tgr