You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MediaWiki或维基百科API提取指定页面的内容图片URL?

用维基百科API提取页面内容图片URL的方案
  • 先提取页面标题
    从维基百科URL里扒出页面标题就行,比如https://zh.wikipedia.org/wiki/上海的标题是上海,英文页面https://en.wikipedia.org/wiki/Shanghai的标题是Shanghai。

  • 调用API拿图片列表
    用MediaWiki的action=query接口,搭配prop=images和titles参数,就能拿到页面里所有内容关联的图片名称,完全不会包含维基Logo这类站点UI图,因为API只返回页面内容里嵌入的图片。
    举个中文维基的请求例子:
    https://zh.wikipedia.org/w/api.php?action=query&prop=images&titles=上海&format=json
    返回的结果里会有类似File:Shanghai Bund night view.jpg的图片名称。

  • 获取图片的实际访问URL
    拿到图片名称后,再用prop=imageinfo和iiprop=url参数调用API,就能拿到图片的直接URL。
    示例请求:
    https://zh.wikipedia.org/w/api.php?action=query&prop=imageinfo&titles=File:Shanghai Bund night view.jpg&iiprop=url&format=json
    结果里的imageinfo[0].url就是你要的图片地址。

  • 可选:过滤非内容图
    要是页面里有模板带的小图标,你可以根据图片名称(比如带icon关键词)、尺寸来过滤,不过一般API返回的列表已经都是内容图了,不用额外处理。

  • Python实现代码
    直接用requests库就能搞定,代码简洁明了:

    import requests
    
    def get_wiki_content_images(page_title, lang="zh"):
        base_url = f"https://{lang}.wikipedia.org/w/api.php"
        
        # 获取页面关联的图片名称列表
        params = {
            "action": "query",
            "prop": "images",
            "titles": page_title,
            "format": "json",
            "imlimit": "max"  # 一次性获取所有图片
        }
        resp = requests.get(base_url, params=params)
        data = resp.json()
        
        image_titles = []
        for page in data["query"]["pages"].values():
            if "images" in page:
                image_titles = [img["title"] for img in page["images"]]
        
        # 只保留File开头的图片条目
        image_titles = [title for title in image_titles if title.startswith("File:")]
        
        # 批量获取图片的实际URL
        image_urls = []
        if image_titles:
            params = {
                "action": "query",
                "prop": "imageinfo",
                "titles": "|".join(image_titles),
                "iiprop": "url",
                "format": "json"
            }
            resp = requests.get(base_url, params=params)
            data = resp.json()
            
            for page in data["query"]["pages"].values():
                if "imageinfo" in page:
                    image_urls.append(page["imageinfo"][0]["url"])
        
        return image_urls
    
    # 调用示例
    if __name__ == "__main__":
        page_title = "上海"
        content_images = get_wiki_content_images(page_title)
        for url in content_images:
            print(url)
    

这个方案的核心是利用维基百科API直接获取页面内容关联的图片,完全避开了网页UI元素的干扰,比用BeautifulSoup解析HTML靠谱得多。

内容的提问来源于stack exchange,提问作者Skander Karoui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:43:24