gpt4 book ai didi

python - 如何使用 pywikibot 登录 wikidata

转载 作者:行者123 更新时间:2023-11-30 22:35:14 25 4
gpt4 key购买 nike

我正在尝试使用 pywikibot 访问 wikidata 中的数据。我尝试使用数据对象的名称而不是代码来执行此操作。当我运行这个脚本时:

import pywikibot


site = pywikibot.Site("wikidata", "wikidata")
repo = site.data_repository()
token = repo.token(pywikibot.Page(repo, 'Main Page'), 'edit')

我收到此错误消息:

Traceback (most recent call last):
File "/Users/this-user/PycharmProjects/teststuff/src/pywikibot_stuff/wikipedia/test.py", line 6, in <module>
token = repo.token(pywikibot.Page(repo, 'Main Page'), 'edit')
File "/Users/this-user/Library/Python/3.6/lib/python/site-packages/pywikibot/tools/__init__.py", line 1337, in wrapper
return obj(*args, **kwargs)
File "/Users/this-user/Library/Python/3.6/lib/python/site-packages/pywikibot/site.py", line 3495, in token
<class 'AssertionError'>
return self.tokens[tokentype]
File "/Users/this-user/Library/Python/3.6/lib/python/site-packages/pywikibot/site.py", line 1785, in __getitem__
assert self.site.user(), 'User must login in this site'
AssertionError: User must login in this site
CRITICAL: Closing network session.

但是,这让我感到困惑,因为当我运行以下脚本时(Q9684 是纽约时报的 wikidata 代码):

import pywikibot

site = pywikibot.Site('wikidata', 'wikidata')
repo = site.data_repository()
item = pywikibot.ItemPage(repo, 'Q9684')

item_dict = item.get()
aliases = item_dict['aliases']
aliases = [aliases[key] for key in aliases]
aliases = [alias for sublist in aliases for alias in sublist]


print(aliases

一切正常,我得到:

['NY Times', 'New York Times', 'The Gray Lady', 'Gray Lady', 'NYT', 'TNYT', 'nytimes.com', 'New-York Daily Times', 'The New-York Times', 'NY Times', 'NY Times', 'New York Times', 'New York Times', 'NYT', 'NY Times', 'NY Times', 'New York Times', 'The Gray Lady', 'Gray Lady', 'The Grey Lady', 'Grey Lady', 'New York Times', 'NYT', '紐約時報', 'nytimes.com', 'New York Times', 'The New York Daily Times', 'NY Times', 'New York Times', 'NYT', 'The Gray Lady', 'The New York Times', 'Нью-Йорк Таймс', 'NY Times', 'New York Times', 'NYT', 'نيو يورك تايمز']

我也尝试过运行:

import pywikibot

site = pywikibot.Site('wikidata', 'wikidata')
repo = site.data_repository()
item = pywikibot.Page(site, 'New York Times')
item_dict = item.get()

print(item_dict)

但随后我收到错误:

pywikibot.exceptions.NoPage: Page [[wikidata:New York Times]] doesn't exist.

我的 user-config.py 文件位于同一目录中,如下所示:

family = 'wikidata'
mylang = 'en'
usernames['wikidata']['wikidata'] = u'ExampleBot'

#console_encoding = 'utf-8'
#use_api_login = True

取消注释最后两行并没有什么区别。

有人知道这里的问题吗?为什么 pywikibot 在我搜索“纽约时报”时要求我登录,但在我使用代码时却不要求我登录?

最佳答案

维基数据中项目页面的标题是它们的“Q”id。因此

item = pywikibot.Page(site, 'New York Times')

创建一个不存在的页面:

>>> item.exists()
False

wikidata 站点的 item.get() 失败。你必须运行:

item = pywikibot.Page(site, 'Q9684')

获取 token 是为了编辑存储库中的内容,而不仅仅是检索,为此您需要登录。

关于python - 如何使用 pywikibot 登录 wikidata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44623245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com