2017-05-15 10 views
0

からテキストを取得します。Pythonは私が<a href="https://wikipedia.readthedocs.io/en/latest/code.html#api" rel="nofollow noreferrer">docs</a>で説明したように、複数のランダムWikipediaのページからテキストを取得するために、ウィキペディアのパッケージでのpython 2.7を使用しています複数のランダムウィキペディアのページ

私は、次のコード

def get_random_pages_summary(pages = 0): 
    import wikipedia 
    page_names = [wikipedia.random(1) for i in range(pages)] 
    return [[p,wikipedia.page(p).summary] for p in page_names] 

text = get_random_pages_summary(50) 

を使用して、私が何をしようとしていますどのような次のエラー

File "/home/user/.local/lib/python2.7/site-packages/wikipedia/wikipedia.py", line 393, in __load raise DisambiguationError(getattr(self, 'title', page['title']), may_refer_to) wikipedia.exceptions.DisambiguationError: "Priuralsky" may refer to: Priuralsky District Priuralsky (rural locality)

がテキストを取得することで取得します。ウィキペディアのランダムなページから、それは普通のテキストでなければなりません。

Wikipediaのページを検索するときに、複数のオプションを持つランダムな名前を取得しているとします。 私はそれを使って1つのWikipediaページを取得します。それはうまくいく。

おかげであなたはランダムな記事のために、私の提案はDisambiguationErrorをキャッチし、再度ランダムな場合の資料をこの問題が発生するだろう(直接異なるツールを使用してHTMLを引っ張っていない)WikipediaのAPIでそれをやっていると

答えて

1

文書(http://wikipedia.readthedocs.io/en/latest/quickstart.html)によると、エラーが複数のページの候補を返します。

try: 
    wikipedia.summary("Priuralsky") 
except wikipedia.exceptions.DisambiguationError as e: 
    for page_name in e.options: 
     print(page_name) 
     print(wikipedia.page(page_name).summary) 

このようにコードを改善することができます。 「解約: ライン393を、__load レイズDisambiguationError(GETATTR(自己、 'タイトル'、ページ[ 'タイトル'])、may_refer_to) wikipedia.exceptions.DisambiguationErrorに - 私はまだエラーを取得しています

import wikipedia 

def get_page_sumarries(page_name): 
    try: 
     return [[page_name, wikipedia.page(page_name).summary]] 
    except wikipedia.exceptions.DisambiguationError as e: 
     return [[p, wikipedia.page(p).summary] for p in e.options] 

def get_random_pages_summary(pages=0): 
    ret = [] 
    page_names = [wikipedia.random(1) for i in range(pages)] 
    for p in page_names: 
     for page_summary in get_page_sumarries(p): 
      ret.append(page_summary) 
    return ret 

text = get_random_pages_summary(50) 
+0

(バター)をかき回すバターチャーン ミルクチャーン チャーンドリル チャック・チャーン リバーチャーン チャーンクリーク チャーンクリーク保護区 デビルズチャーン チャーン駅 チャーン(Shihadアルバム) C:」を参照することができます(セブン・メアリー・スリー・アルバム) チャーン(バンド) 製品チャーニング チャーニング(株取引) チャーティング・レート チャーニング(暗号) – thebeancounter

+0

が見つかりました!あなたのコードの問題は、複数のオプションを見つけてそれを検索するときに、複数のオプションも発生することがありました。e.optionsの各オプションよりget_page_summary関数を再度実行して解決しました。 – thebeancounter

+0

私のコードを修正しました。とにかく、あなたがそれを解決できるのは良いことでした。 –

1

。あなたは再びその候補者を検索する必要があるので、

def random_page(): 
    random = wikipedia.random(1) 
    try: 
     result = wikipedia.page(random).summary 
    except wikipedia.exceptions.DisambiguationError as e: 
     result = random_page() 
    return result 
関連する問題