使用python wikitools解析wikipedia存根
我从以下方面实现了该示例: 我读了很多书,还有其他几本 我正在尝试获取与某个类别相关的一些维基百科存根的转储,并将它们插入到一个内部语义mediawiki站点中。在本例中,我使用“索马里地区”类别。该脚本使用mediawiki API获取数据,然后解析数据,删除所有需要的模板信息使用python wikitools解析wikipedia存根,python,api,parsing,mediawiki,Python,Api,Parsing,Mediawiki,我从以下方面实现了该示例: 我读了很多书,还有其他几本 我正在尝试获取与某个类别相关的一些维基百科存根的转储,并将它们插入到一个内部语义mediawiki站点中。在本例中,我使用“索马里地区”类别。该脚本使用mediawiki API获取数据,然后解析数据,删除所有需要的模板信息 from wikitools import wiki from wikitools import category import mwparserfromhell wikisite = "http://en.wiki
from wikitools import wiki
from wikitools import category
import mwparserfromhell
wikisite = "http://en.wikipedia.org/w/api.php"
parse_category = "Somali_Region"
wikiObject = wiki.Wiki(wikisite)
wikiCategory = category.Category(wikiObject, parse_category)
articles = wikiCategory.getAllMembersGen(namespaces=[0])
for article in articles:
wikiraw = article.getWikiText()
parsedWikiText = mwparserfromhell.parse(wikiraw)
for template in parsedWikiText.filter_templates():
parsedWikiText.remove(template)
print parsedWikiText
如果我尝试从wikipedia进行转储并插入,则内部语义mediawiki站点将失败,因此这不是一个选项。是否可以使用API将数据插入语义mediawiki站点?我阅读了,但找不到python示例 如果我理解正确,您希望将您的
parsedWikiText
保存到私人wiki中
下面是我做这类事情的方法(您需要将用户名
和密码
存储在某个地方;我使用配置文件,但有更安全的方法)。我会在你的循环之前接你的
# Set up and authenticate into the target wiki if you need to.
from wikitools import wiki, page
target_wiki = wiki.Wiki('http://wiki.example.com/w/api.php')
site.login(USERNAME, PASSWORD)
for article in articles:
wikiraw = article.getWikiText()
parsedWikiText = mwparserfromhell.parse(wikiraw)
for template in parsedWikiText.filter_templates():
parsedWikiText.remove(template)
# Use the API's edit function to save the new content.
target_title = article.title
target_page = page.Page(target_wiki, target_title)
result = target_page.edit(text=parsedWikiText, summary="Imported text")
# Check to see if it worked.
if result['edit']['result'] == 'Success':
print 'Saved', target_title
else:
print 'Save failed', target_title
我假设您希望将parsedWikiText
保存到新页面中。如果wiki中的页面上已有内容,则必须先使用target\u page.getWikiText()
阅读,然后以某种方式混合新文本。我还假设这篇文章与维基百科上的同名;如果没有,则更改target\u title
您是否尝试过pywikipediabot
?我还没有试过wikitools,它看起来不错,我可能很快就会试用。我对pywikipediabot
有很好的经验。