Почему pywikibot выдает <связанный метод Page.categories of Page (Wikipedia: Sandbox)> на выходе?

Я использую базовую версию PywikiBot в linux для создания программы, которая просто получает категории кода страницы Википедии: мой код:

# -*- coding: utf-8  -*-
import pywikibot

site = pywikibot.Site("en")
page = pywikibot.Page(site, u"Wikipedia:Sandbox")

item = pywikibot.ItemPage.fromPage(page)
dictionary = item.get()

print page.categories

И я ожидаю получить категории, но я получаю:

<bound method Page.categories of Page(Wikipedia:Sandbox)>

Я следую этому уроку, но должен сказать, что документация в pywikibot написана плохо, и вы должны открыть файлы, чтобы узнать некоторую информацию, и я нашел категории def:

def categories(self, withSortKey=False, step=None, total=None,
               content=False):
    """Iterate categories that the article is in.

    @param withSortKey: if True, include the sort key in each Category.
    @param step: limit each API call to this number of pages
    @param total: iterate no more than this number of pages in total
    @param content: if True, retrieve the content of the current version
        of each category description page (default False)
    @return: a generator that yields Category objects.

    """
    return self.site.pagecategories(self, withSortKey=withSortKey,
                                    step=step, total=total, content=content)

И я предпочитаю не менять рамочные коды.

1 ответ

Решение

Попробуй это:

print page.categories()

Редактировать:

I test this before i get :<pywikibot.data.api.CategoryPageGenerator object at 0xb6c444ec> 

Это потому, что метод возвращает генератор, который должен быть повторен, прежде чем он получит данные. При использовании списка (page.categories()) он создает список из генератора.

Другой и предпочтительный способ - использовать генератор в цикле for, например так:

for category in page.categories():
    print category

Вы можете прочитать о генераторах здесь:

https://wiki.python.org/moin/Generators

Другие вопросы по тегам