You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过API获取维基百科页面浏览量?求推荐适用于Python的相关API

获取维基百科页面浏览量的API及Python实现方法

嘿,刚好对这个问题熟得很!想获取维基百科页面的浏览量,不管是单天数据还是总浏览量,其实有挺方便的官方API和Python工具可用,我给你慢慢捋清楚:

维基官方的浏览量API

维基媒体提供了Pageviews API(属于Wikimedia REST API的一部分),专门用来查询页面的浏览统计数据。你可以通过它获取指定时间段内的每日浏览量,再累加得到总浏览量——这是最直接的官方途径,数据权威可靠。

这个API支持按项目(比如英文维基、中文维基)、页面标题、访问类型(桌面/移动端)、时间段等维度筛选数据,完全能满足你获取总浏览量的需求。

Python 专属的便捷工具

如果你不想自己写繁琐的HTTP请求和数据处理代码,Python生态里有现成的库可以用:

  • mwviews:这是专门为维基百科浏览量查询打造的库,封装了Pageviews API的逻辑,用起来特别省心。
  • 当然你也可以直接用requests库调用官方API,灵活性更高,适合需要自定义参数的场景。

具体代码示例

方法1:用mwviews库快速实现

首先安装库:

pip install mwviews

然后写代码:

from mwviews.api import PageviewsClient
from datetime import datetime

# 初始化客户端,必须设置User-Agent(维基API要求,不然会被拒绝)
pv_client = PageviewsClient(user_agent="MyWikiStatsApp/1.0 (myemail@example.com)")

# 指定要查询的页面(这里以中文维基的"Python"页面为例)
page_title = "Python"
wiki_project = "zh.wikipedia"

# 设置时间段:从2007年(维基开始记录浏览量的年份)到今天
end_date = datetime.today().strftime("%Y%m%d")
daily_views = pv_client.article_views(wiki_project, [page_title], start="20070101", end=end_date)

# 累加每日浏览量得到总浏览量
total_views = 0
for day, views_data in daily_views.items():
    total_views += views_data.get(page_title, 0)

print(f"《{page_title}》页面总浏览量:{total_views}")

方法2:直接调用官方REST API(用requests库)

如果不想额外安装库,直接用requests也能实现:

import requests
from datetime import datetime

def get_total_wiki_views(page_title, wiki_lang="zh"):
    # 处理页面标题:空格替换为下划线(维基页面URL的格式要求)
    formatted_title = page_title.replace(" ", "_")
    end_date = datetime.today().strftime("%Y%m%d")
    
    # 构建API请求URL
    api_url = f"https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/{wiki_lang}.wiki/all-access/all-agents/{formatted_title}/daily/20070101/{end_date}"
    
    # 必须设置User-Agent
    headers = {"User-Agent": "MyWikiStatsApp/1.0 (myemail@example.com)"}
    response = requests.get(api_url, headers=headers)
    
    if response.status_code == 200:
        data = response.json()
        # 累加所有日期的浏览量
        total_views = sum(item["views"] for item in data["items"])
        return total_views
    else:
        print(f"请求失败,状态码:{response.status_code}")
        return None

# 使用示例
total = get_total_wiki_views("Python")
if total:
    print(f"页面总浏览量:{total}")

几个重要注意事项

  • 必须设置User-Agent:维基的API要求所有请求都要包含有效的User-Agent(你的应用名称+联系方式),否则会直接拒绝你的请求,这是为了防止滥用。
  • 页面标题格式:维基的页面URL里,空格是用下划线_代替的,所以查询前最好先处理一下标题格式。
  • 数据起始时间:维基的浏览量统计从2007年开始,更早的数据是无法获取的。

内容的提问来源于stack exchange,提问作者Random person

火山引擎 最新活动