Как мне получить HTML-код вики-страницы с помощью Pywikibot?

Я использую ядро ​​pywikibot и раньше использовал другую оболочку Python Mediawiki API как Wikipedia.py (которая имеет метод.HTML). Я переключился на ядро ​​Pywikibot, потому что я думаю, что у него гораздо больше возможностей, но я не могу найти подобный метод. (будьте осторожны: я не очень опытный).

6 ответов

Решение

Я выложу здесь user283120 второй ответ, точнее первого:

Ядро Pywikibot не поддерживает прямой (HTML) способ взаимодействия с Wiki, поэтому вы должны использовать API. Если вам нужно, вы можете сделать это легко с помощью urllib2.

Это пример, который я использовал, чтобы получить HTML-страницу вики в общем виде: import urllib2 ... url = " https://commons.wikimedia.org/wiki/" + page.title().replace(" ","_") html = urllib2.urlopen(url).read().decode('utf-8')

IIRC вам нужен HTML для всех страниц, поэтому вам нужно что-то, что использует api.php? Action = parse. В Python я часто просто использовал вики-инструменты для таких вещей, я не знаю ни о PWB, ни о других ваших требованиях.

"[saveHTML.py] загружает HTML-страницы статей и изображений и сохраняет интересные части, т.е. текст статьи и нижний колонтитул, в файл"

источник: https://git.wikimedia.org/blob/pywikibot%2Fcompat.git/HEAD/saveHTML.py

В общем, вы должны использовать pywikibot вместо википедии (например, вместо "import wikipedia" вы должны использовать "import pywikibot"), и если вы ищете методы и класс, которые были в wikipedia.py, они теперь разделены и могут быть найдены в папке pywikibot (в основном в файлах page.py и site.py)

Если вы хотите запустить свои скрипты, которые вы написали в compat, вы можете использовать скрипт в ядре pywikibot с именем compat2core.py (в папке scripts), и есть подробная справка о преобразовании с именем README-translation.txt, внимательно прочтите его.

Mediawiki API имеет действие синтаксического анализа, которое позволяет получить фрагмент html для вики-разметки, возвращаемый анализатором разметки Mediawiki.

Для библиотеки pywikibot уже реализована функция, которую вы можете использовать следующим образом:

      def getHtml(self,pageTitle):
        '''
        get the HTML code for the given page Title
        
        Args:
            pageTitle(str): the title of the page to retrieve
            
        Returns:
            str: the rendered HTML code for the page
        '''
        page=self.getPage(pageTitle)
        html=page._get_parsed_page()
        return html

При использовании библиотеки Python mwclient существует общий метод API, см.https://github.com/mwclient/mwclient/blob/master/mwclient/client.py .

Который можно использовать для получения html-кода следующим образом:

      def getHtml(self,pageTitle):
        '''
        get the HTML code for the given page Title
        
        Args:
            pageTitle(str): the title of the page to retrieve
        '''
        api=self.getSite().api("parse",page=pageTitle)
        if not "parse" in api:
            raise Exception("could not retrieve html for page %s" % pageTitle)
        html=api["parse"]["text"]["*"]
        return html   

Как показано выше, это дает интерфейс с утиным типом, который реализован в библиотеке py-3rdparty-mediawiki , для которой я являюсь коммиттером. Это было решено с закрытием проблемы 38 - добавить поиск html-страницы.

С Pywikibot вы можете использовать для получения html-контента:

      import pywikibot
from pywikibot.comms import http
site = pywikibot.Site('wikipedia:en')
page = pywikibot.Page(s, 'Elvis Presley')
path = '{}/index.php?title={}'.format(site.scriptpath(), page.title(as_url=True))
r = http.request(site, path)
print(r[94:135])

Это должно дать html-контент

      '<title>Elvis Presley – Wikipedia</title>\n'

С Pywikibot 6.0 http.request()дает requests.Responseобъект, а не обычный текст. В этом случае вы должны использовать текст Атрибут:

      print(r.text[94:135])

чтобы получить тот же результат.

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