Как мне получить 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])
чтобы получить тот же результат.