首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pywikibot -查找页面图像的源站点

Pywikibot -查找页面图像的源站点
EN

Stack Overflow用户
提问于 2021-03-11 18:22:31
回答 1查看 44关注 0票数 0

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

代码语言:javascript
复制
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()输出为假,我可以检查commons,但我担心图像会存储在不同的站点上。

我尝试过Page.image_repository属性,但这会返回commons,即使页面图像不存在并存储在wikipedia上:en

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

EN

回答 1

Stack Overflow用户

发布于 2021-04-01 18:41:33

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
site = pywikibot.Site('wikipeda:de')
page1 = pywikibot.Page(site, '50 Cent')
page2 = pywikibot.Page(site, '0010x0010')
img1 = page1.page_image()
img2 = page2.page_image()

测试站点:

代码语言:javascript
复制
img1.site
img2.site

将会给予

代码语言:javascript
复制
APISite("en", "wikipedia")
APISite("en", "wikipedia")

现在向上投射它:

代码语言:javascript
复制
img1 = repo_file(img1)
img2 = repo_file(img2)

再次测试该站点:

代码语言:javascript
复制
img1.site
img2.site

将会给予

代码语言:javascript
复制
APISite("commons", "commons")
APISite("en", "wikipedia")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66580588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档