Pywikibot
Pywikibot 是一个用 Python 编写的开源库与工具集,用于与 MediaWiki 网站进行自动化交互。
| 功能类别 | 描述 |
| 页面编辑 | 自动创建、修改、删除、重命名 Wiki 页面 |
| 内容读取 | 获取页面内容、历史、模板、分类、链接等 |
| 文件上传 | 批量上传图片或文档到 Wiki(如 Wikimedia Commons) |
| 结构化数据 | 访问与编辑 Wikidata 实体(items、properties、claims) |
| 批量任务 | 自动执行清理、模板替换、分类维护等机器人任务 |
| 站点管理 | 查询站点信息、用户权限、日志、媒体文件等 |
| 脚本化接口 | 可集成到自己的 Python 程序中,实现自动化管理或数据同步 |
根据wikidata查看是否存在wikipedia条目
family = 'wikidata'
mylang = 'wikidata'
usernames['wikidata']['wikidata'] = u'YourBot'
import pywikibot
site = pywikibot.Site('wikidata', 'wikidata')
repo = site.data_repository()
list1 = ['Q21105278', 'Q2']
list2 = []
for ite in list1:
item = pywikibot.ItemPage(repo, ite)
if 'enwiki' in item.get()['sitelinks']:
print(ite, 'in enwiki')
list2.append(ite)
else:
print(ite, 'not in enwiki')
print(list2)
获取Wikipedia词条对应Wikidata item id
# -*- coding: utf-8 -*-
import pywikibot
site = pywikibot.Site('en', 'wikipedia')
list1 = [u"Pywikibot", u"MediaWiki", ]
list2 = []
for title in list1:
page = pywikibot.Page(site, title)
try: # 避免出现pywikibot.exceptions.NoPage而中断
item = pywikibot.ItemPage.fromPage(page)
if 'enwiki' in item.get()['sitelinks']:
list2.append(item.id)
except pywikibot.exceptions.NoPage:
pass
print(list2)
也可不使用pywikibot,仅通过api实现
import requests
wikidata_api = "https://www.wikidata.org/w/api.php"
def getItemID(titles):
"""
:titles: copy from csv file
:return: a list of Wikidata item id
"""
list1 = [] + titles.split('\n')
list2 = []
count = 0
for title in list1:
if len(title) == 0:
continue
count += 1
r = requests.get(wikidata_api + '?action=wbgetentities&sites=enwiki&format=json&titles=' + title)
id = list(r.json()['entities'].keys())[0]
if id != '-1':
print(count, id, title)
list2.append(id)
return list2