0

Python の学習の一環として、記事のテキストを返すための MediaWiki API のラッパーを作成しています。

記事を検索する関数は次のとおりです。

def article_search(self, search_terms):
    url = self.article_url % (self.language, search_terms)
    response = requests.get(url)
    tree = html.fromstring(response.text)

    results = tree.xpath('//rev[@contentmodel='wikitext']/text()')
    test_redirect = re.search('\#REDIRECT', str(results))

    if test_redirect:
        redirect = re.search(r'\[\[([A-Za-z0-9_]+)\]\]', str(results))
        go_to = redirect.group(1)
        article_search(go_to)

    else:
        return results

if test_redirectif-else ブロックの目的は、検索結果が実際に別のページ ( )にリダイレクトしようとしているかどうかを確認し、リダイレクト先のページを で検索することですarticle_search(go_to)。リダイレクトしないことがわかっているページでコードを実行すると、正常に動作します。ただし、リダイレクトのあるページで実行NameError: global name 'article_search' is not definedすると、 . これはおそらく初心者の質問だと思いますが、何が間違っているのかよくわかりません。何か助けはありますか?

4

1 に答える 1

7

article_searchそれはクラスの一部であると想定しています(を使用しているためself)。その場合、次のように呼び出す必要があります。

self.article_search(go_to)

(変な staticmethod ではなく、インスタンスのメソッドだと仮定して)

于 2013-08-03T07:28:17.840 に答える