2017-06-10 9 views
0

mwparserfromhellを使用してWikiMediaテキストを解析しています。mwparserfromhellの次のノードを取得する

ページから場所を取得する必要があります。例えばとして

私はAPIWiki 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() 

答えて

0

、内容はセクション本当に「内部」ではありません、セクションタイトルは、より多くのアンカーのようにページ上のマーカーです。それはあなたが、この場合、セクション1の内容がどうなるか

<h2>section 1</h2> 
<table> 
    <tr> 
    <td> 
     <h2>section 2</h2> 
    </td> 
    </tr> 
</table> 

になりますどの

== section 1 == 
{| 
| 
== section 2 == 
|} 

のようなものを行うことができることを意味しますか?

+0

私はチェックしました。はい、 'Heading'ノードの中に子供はいません。どのように次のノードを取得するには?または兄弟ノード?出来ますか? – sam

+1

もちろん、 'wiki_parsed.nodes [wiki_parsed.nodes.index(filtered_headings [0])+ 1)'などです。しかし、私が説明したように、それは必ずしもあなたが期待するものを意味するとは限りません。 – Tgr

+0

'mwparserfromhell'はネストされたセクションをとにかく扱うことができないようです。 – Tgr

関連する問題