我浏览了维基百科上的活人类别,并收集了页面图像,。问题是,有些图片存储在wikimedia公共网站上,而有些则存储在原始的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)
这很好,如果wikipedia.exists((输出False,我可以检查commons,但我担心图像会存储在不同的网站上。
我尝试过Page.image_repository属性,但这会返回commons,即使页面图像不存在,并且存储在wikipedia:en-上
有没有一种方法可以从Page对象中获取原始网站?因为我知道这可能的唯一方法是下载HTML页面并解析它,这太复杂了。
正如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")