Pywikibot - 查找页面图片的源站点

我浏览维基百科上的活人类别并收集页面图像。问题是,有些图像存储在 wikimedia commons 站点上,而有些则存储在原始 wikipedia:en 站点上。我想知道图像存储在哪里(如果它存储在除了 en:wiki 和 commons 之外的其他地方)

import pywikibot

enwiki = pywikibot.Site("en","wikipedia")
commons = pywikibot.Site("commons","commons")
page1 = pywikibot.Page(enwiki,"50 Cent")
page2 = pywikibot.Page(enwiki,"0010x0010")
pageimage1 = page1.page_image()
pageimage2 = page2.page_image()
pageimage1.exists() //outputs False (50 Cent page image is stored on commons)
pageimage2.exists() //outputs True  (0010x0010 page imaged is stored on wikipedia:en)

这很好,如果维基百科 .exists() 输出 False,我可以检查公共资源,但我担心图像会存储在其他站点上的情况。

我已经尝试了 Page.image_repository 属性,但是即使页面图像不存在并且存储在维基百科上,它也会返回公共资源:en

有没有办法从 Page 对象中获取原始站点?因为我知道这可能的唯一方法是下载 HTML 页面并解析它,这太复杂了。

nidi_3 回答:Pywikibot - 查找页面图片的源站点

正如 Tgr 所指出的,最好的方法是使用 FilePage.file_is_shared() 方法。要上传文件,您可以执行以下操作:

import pywikibot

def repo_file(filepage):
    """Return a FilePage residing on repository."""
    if filepage.file_is_shared():
        filepage = pywikibot.FilePage(filepage.site.image_repository(),filepage.title())
    return filepage

使用您的第一个示例,它会像这样工作:

site = pywikibot.Site('wikipeda:de')
page1 = pywikibot.Page(site,'50 Cent')
page2 = pywikibot.Page(site,'0010x0010')
img1 = page1.page_image()
img2 = page2.page_image()

测试网站:

img1.site
img2.site

会给

APISite("en","wikipedia")
APISite("en","wikipedia")

现在上传:

img1 = repo_file(img1)
img2 = repo_file(img2)

再次测试网站:

img1.site
img2.site

会给

APISite("commons","commons")
APISite("en","wikipedia")
本文链接:https://www.f2er.com/779038.html

大家都在问