Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python wikitools解析wikipedia存根_Python_Api_Parsing_Mediawiki - Fatal编程技术网

使用python wikitools解析wikipedia存根

使用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

我从以下方面实现了该示例:

我读了很多书,还有其他几本

我正在尝试获取与某个类别相关的一些维基百科存根的转储,并将它们插入到一个内部语义mediawiki站点中。在本例中,我使用“索马里地区”类别。该脚本使用mediawiki API获取数据,然后解析数据,删除所有需要的模板信息

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
有很好的经验。