【发布时间】:2015-02-11 02:42:45
【问题描述】:
我正在使用 pywikibot-core,并且在另一个 python Mediawiki API 包装器之前使用了 Wikipedia.py(它有一个 .HTML 方法)。我切换到 pywikibot-core 因为我认为它有更多功能,但我找不到类似的方法。 (注意:我不是很熟练)。
【问题讨论】:
标签: python wikipedia wikipedia-api pywikibot
我正在使用 pywikibot-core,并且在另一个 python Mediawiki API 包装器之前使用了 Wikipedia.py(它有一个 .HTML 方法)。我切换到 pywikibot-core 因为我认为它有更多功能,但我找不到类似的方法。 (注意:我不是很熟练)。
【问题讨论】:
标签: python wikipedia wikipedia-api pywikibot
"[saveHTML.py] 下载文章和图片的 HTML 页面并保存有趣的部分,即文章文本和页脚到文件"
来源:https://git.wikimedia.org/blob/pywikibot%2Fcompat.git/HEAD/saveHTML.py
【讨论】:
IIRC 你想要整个页面的 HTML,所以你需要使用 api.php?action=parse 的东西。在 Python 中,我经常只使用 wikitools 来完成这样的事情,我不知道 PWB 或您的其他要求。
【讨论】:
一般而言,您应该使用 pywikibot 而不是 wikipedia(例如,而不是“import wikipedia”,而应该使用“import pywikibot”),如果您正在寻找 wikipedia.py 中的方法和类,它们现在是分开的并且可以在pywikibot文件夹中找到(主要在page.py和site.py中)
如果您想运行您在 compat 中编写的脚本,您可以使用 pywikibot-core 中名为 compat2core.py 的脚本(在脚本文件夹中),并且有一个名为 README-conversion.txt 的关于转换的详细帮助,请阅读仔细看看。
【讨论】:
我将在此处发布 user283120 第二个答案,比第一个更精确:
Pywikibot 核心不支持与 Wiki 交互的任何直接 (HTML) 方式,因此您应该使用 API。 如果需要,可以使用 urllib2 轻松完成。
这是我用来在 commons 中获取 wiki 页面的 HTML 的示例:
import urllib2
...
url = "@987654321@" + page.title().replace(" ","_")
html = urllib2.urlopen(url).read().decode('utf-8')
【讨论】:
Mediawiki API 有一个解析操作,允许获取由 Mediawiki 标记解析器返回的 wiki 标记的 html sn-p。
对于pywikibot library,已经实现了一个函数,您可以像这样使用它:
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
当使用mwclient python library 时,有一个通用的 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
如上所示,这给出了一个duck typed interface,它在我是提交者的py-3rdparty-mediawiki 库中实现。关闭 issue 38 - add html page retrieval
解决了这个问题【讨论】:
getHtml 和pywikibot 的工作示例吗? grep 在代码库中找不到任何getHtml 的实例。
使用 Pywikibot,您可以使用 http.request() 获取 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 对象而不是纯文本。在这种情况下,您必须使用 text 属性:
print(r.text[94:135])
得到相同的结果。
【讨论】: