Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Wikipedia pageview数据获取(bigquery)

Wikipedia pageview数据获取(bigquery)

作者头像
千灵域
发布于 2022-06-17 04:54:28
发布于 2022-06-17 04:54:28
3.1K00
代码可运行
举报
文章被收录于专栏:challenge filterchallenge filter
运行总次数:0
代码可运行

pageview数据介绍

维基百科pageview数据是Wikimedia技术团队所维护的访问量数据集。该数据集自2015年五月启用,其具体的pageview定义为对某个网页内容的请求,会对爬虫和人类的访问量进行区分,粒度为小时级别,如下图:

bigquery介绍

维基百科数据可以通过其API获取。但是API只能拿到每个页面天级别的数据或者全部页面小时级的数据,如果需要获取每个页面小时级的数据,则需要通过其原始数据文件进行分析。但是这部分文件的数量实在是太多了,因此使用bigquery是一个不错的选择。

bigquery请求

可以使用SQL命令对其进行请求。由于数据在bigquery中使用分区表的形式存放,因此每次请求一年的数据。 以下代码以2015年的数据请求为例:

WARNING:Bigquery并不是免费的,每次请求可能需要消耗十几个GB的额度,请注意!

  1. 获取全部数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT wiki,datehour,SUM(views) as totalViews FROM `bigquery-public-data.wikipedia.pageviews_2015` WHERE datehour BETWEEN "2015-01-01" AND "2016-01-01" 
GROUP BY datehour,wiki;
  1. 获取各个语言版本维基的首页数据。这个是因为大部分维基百科的页面数量都非常小
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT * FROM `bigquery-public-data.wikipedia.pageviews_2020`
 WHERE datehour BETWEEN "2020-01-01" AND "2021-01-01" AND ( (wiki='en' AND (title='Main_Page' OR title='Special:Search')) 
      OR (wiki='en.m' AND (title='Main_Page' OR title='Special:Search'))
      OR (wiki='zh' AND (title='Wikipedia:首页' OR title='Special:搜索'))
      OR (wiki='de' AND (title='Wikipedia:Hauptseite' OR title='Spezial:Suche'))
      OR (wiki='fr' AND (title='Wikipédia:Accueil_principal' OR title='Spécial:Recherche'))
      OR (wiki='ja' AND (title='メインページ' OR title='特別:検索'))
      OR (wiki='ru' AND (title='Заглавная_страница' OR title='Служебная:Поиск'))
      OR (wiki='ar' AND (title='الصفحة_الرئيسية' OR title='خاص:بحث'))
      OR (wiki='ca' AND (title='Portada' OR title='Especial:Cerca'))
      OR (wiki='it' AND (title='Pagina_principale' OR title='Speciale:Ricerca'))
      );
  1. top100en_Leakage:英文维基百科2015年访问量最大的前100个页面数据,但是写错了,最后变成了访问量大于100的页面。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT title FROM (
SELECT title,AVG(views) AS perviews FROM `bigquery-public-data.wikipedia.pageviews_2015` WHERE datehour BETWEEN "2015-07-12" AND "2015-07-13" AND wiki='en' 
GROUP BY title)
WHERE perviews>100;
  1. top100en:英文维基百科2015年访问量最大的前100个页面数据。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT wiki.datehour,wiki.title,wiki.views FROM (
  SELECT innerViewer.title,innerViewer.perviews FROM(
    SELECT title,AVG(views) AS perviews,COUNT(*) as viewCount FROM `bigquery-public-data.wikipedia.pageviews_2015` WHERE datehour BETWEEN "2015-01-01" AND "2016-01-01" AND wiki='en' 
    GROUP BY title ORDER BY perviews) innerViewer
   WHERE innerViewer.perviews>500 AND viewCount > 3600 LIMIT 100) doc, `bigquery-public-data.wikipedia.pageviews_2019` as wiki
 WHERE wiki.datehour BETWEEN "2019-01-01" AND "2020-01-01" AND wiki.title = doc.title AND wiki.wiki='en';

由于各种原因,总耗费折算为人民币超过一千元。当然,并没有超过谷歌给新用户的免费额度,所以实际上应该是没有花费。为了方便之后获取,我将其上传到百度云盘上了。

防止爬虫,链接使用了base64进行加密:aHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMWJRbll2OFUyZTZKTi1NV3c0MjJDOWc=,提取码为p3o5。

进一步处理

写了个python程序进行进一步的处理,以获取每个页面的pageview访问数据。 目标为得到对应页面五年来的pageview数据并保存为csv文件。该csv文件至少有两列,一列为日期,一列为小时级别的访问量。

数据使用top100en数据为基础,放在E盘的wikidata中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import os
os.chdir(r"E:\wikidata")
# 2015的版本作为基底
dirname = 'top100en'
filename = '2015.csv'
baseData = pd.read_csv(dirname+'\\'+filename,encoding='utf-8')

grouped_result = baseData.groupby('title')
# convert result to dictionary
baseDict = {}
for name,group in grouped_result:
    baseDict[name] = group
# 开始遍历后面的所有年份
for year in range(2016,2021):
    keys = list(baseDict.keys())
    filename = str(year)+'.csv'
    yearData = pd.read_csv(dirname+'\\'+filename,encoding='utf-8')
    grouped_result = yearData.groupby('title')

    # 遍历所有的keys,尝试将pandas DataFrame数据进行拼接
    errorList = []
    for key in keys:
        try:
            newDataFrame = grouped_result.get_group(key)
            #将获取到的新值与旧有数据进行拼接
            baseDict[key] = pd.concat([baseDict[key],newDataFrame])
        except KeyError:
            #如果该值没有找到,则会报这个错误。此时记录下来,循环结束后将其从baseData中删除
            errorList.append(key)
    
    print("error_list of year {} is {}".format(year,errorList))
    print('Delete them')
    for errorItem in errorList:
        del baseDict[errorItem]


# 获取数据
data = baseDict["Donald_Trump"] # ! 此处修改需要获取的页面名称
data.sort_values("datehour",inplace=True)
outputData = data["views"].to_numpy()
print("数据长度",len(data))
# 进行改写
newDF = data[["datehour","views"]]
newDF.columns = ["datetime","view"]
newDF["datetime"] = newDF["datetime"].apply(lambda x: datetime.strptime(x,"%Y-%m-%d %H:%M:%S %Z").strftime("%Y%m%d%H"))
newDF.to_csv("result.csv",index=False) # 导出
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何用R和API免费获取Web数据?
API是获得Web数据的重要途径之一。想不想了解如何用R调用API,提取和整理你需要的免费Web数据呢?本文一步步为你详尽展示操作流程。
王树义
2018/08/22
2.6K0
如何用R和API免费获取Web数据?
用Pandas从HTML网页中读取数据
本文,我们将通过几步演示如何用Pandas的read_html函数从HTML页面中抓取数据。首先,一个简单的示例,我们将用Pandas从字符串中读入HTML;然后,我们将用一些示例,说明如何从Wikipedia的页面中读取数据。
老齐
2020/05/15
10.6K0
用Pandas从HTML网页中读取数据
Pandas雅虎金融数据获取与分析
利用Pandas模块直接获取雅虎财经数据,方便之极。注意把官方提示把from pandas.io import data, wb替换为from pandas_datareader import data, wb。 Pandas for finance 文档。 上证指数000001.SS.
用户2183996
2018/06/28
5K0
全球访问量第5的网站,创始人身家才100万美元
本文介绍了维基百科创始人吉米·威尔斯的访谈记录和他的贡献,包括创立维基百科、Nupedia等,以及其作为全球访问量排名第5的网站的现状和运营方式。维基百科以“人类所有知识的集大成者”为目标,致力于提供高质量的、免费的知识查询服务。
企鹅号小编
2018/01/08
1.5K0
全球访问量第5的网站,创始人身家才100万美元
如何让pandas根据指定列的指进行partition
UTF-8的问题暂且不谈,现在需要将其作为csv文件读入内存中,并且按照title分成不同的datehour->views表,并按照datehour排序。将2015~2020的数据按照同样的操作进行处理,并将它们拼接成一张大表,最后将每一个title对应的表导出到csv,title写入到index.txt中。
千灵域
2022/06/17
3.9K0
命令行上的数据科学第二版 三、获取数据
本章讨论 OSEMN 模型的第一步:获取数据。毕竟,没有任何数据,我们就没有多少数据科学可以做。我假设你已经有了解决数据科学问题所需的数据,第一步你需要把这些数据放到你的电脑上(也可能放到 Docker 容器里)。
ApacheCN_飞龙
2023/03/31
2.7K0
假期还要卷,24个免费数据集送给你
数据可视化项目的良好数据集是公开发布数据的新闻网站,他们通常会提供清理过的数据,并且已经有了可以复制或改进的图表,我们既可以从这些图表中找寻灵感,也可以对这些图表直接进行二次改进
周萝卜
2022/12/27
1.5K0
假期还要卷,24个免费数据集送给你
Python在Finance上的应用5 :自动获取是S&P 500的成分股
欢迎来到Python for Finance教程系列的第5讲。 在本教程和接下来的几篇文章中,我们将着手研究如何为更多公司提供大量的定价信息,以及我们如何一次处理所有这些数据。
万能数据的小草
2020/02/10
2.4K0
如何使用统计显着性检验来解释机器学习结果
在比较两种不同的机器学习算法或比较相同的算法与不同的配置时,收集一组结果是一个好习惯。
老人雨何
2018/02/07
3.2K0
如何使用统计显着性检验来解释机器学习结果
GitHub项目:自然语言处理领域的相关干货整理
自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。本文作者为NLP初学者整理了一份庞大的自然语言处理领域的概览。选取的参考文献与资料都侧重于最新的深度学习研究成果。这些资源能为想要深入钻研一个NLP任务的人们提供一个良好的开端。 指代消解 https://github.com/Kyubyong/nlp_tasks#coreference-resolution 论文自动评分 论文:Automatic Text Scoring Using Neural Net
AiTechYun
2018/03/05
2.9K0
spark实战之:分析维基百科网站统计数据(java版)
在《寻找海量数据集用于大数据开发实战(维基百科网站统计数据)》一文中,我们获取到维基百科网站的网页点击统计数据,也介绍了数据的格式和内容,今天就用这些数据来练习基本的spark开发,开发语言是Java;
程序员欣宸
2019/05/29
8790
spark实战之:分析维基百科网站统计数据(java版)
​爬虫+动态代理助力 AI 训练数据采集
近年来,AI 技术飞速发展,很多朋友都投身于 AI 模型的训练。然而,相较于模型的获取,高质量的数据往往更加难以收集。一方面,互联网每天都在源源不断地产生新数据,另一方面,各大网站普遍设有反爬机制,阻止自动化程序抓取信息。在这种情况下,动态代理服务成为破解难题的关键工具。通过动态代理,我们的爬虫程序可以模拟不同的用户身份,在访问网站时伪装 IP 地址,从而有效降低被封禁的风险。
袁袁袁袁满
2025/03/19
1860
用维基百科的数据改进自然语言处理任务
自然语言处理(NLP)正在兴起。计算语言学和人工智能正在加入它们的力量,促进突破性发现。虽然研究集中在显著提高NLP技术上,但企业正在把这项技术视为一项战略资产。这种由NLP引导的突破性创新的主要作用是大量可用的文本数据。谈到数字化时,尤其是对于企业来说,重要的是要记住文档是知识的主要来源。
deephub
2021/04/30
1.1K0
数据工程实践:从网络抓取到API调用,解析共享单车所需要的数据
设想这样一个案例,当前共享单车应用广泛,在很多城市都有大量的投放,一方面解决了人们的短途快速出行问题,一方面对环境保护做出了贡献。但对于单车公司来说,如何确保单车投放在人们需要的地方?大量的共享单车聚集在市中心,且在雨雪等恶劣天气,人们又不会使用。
幂简集成
2024/01/05
5560
数据工程实践:从网络抓取到API调用,解析共享单车所需要的数据
RDF 和 SPARQL 初探:以维基数据为例
维基百科有一个姐妹项目,叫做"维基数据"(Wikidata)。你可以从维基百科左侧边栏点进去。
ruanyf
2020/02/25
2.2K0
无需锁定的向量搜索:为什么开发者喜欢ClickHouse
告别昂贵专有向量数据库!ClickHouse凭高性能OLAP架构,轻松应对AI向量搜索。原生支持Kafka、Spark,无缝集成Hugging Face、LangChain,构建维基百科搜索引擎,毫秒级响应,告别厂商锁定,ZSTD压缩提速,解锁开源云原生新姿势!
云云众生s
2025/03/16
1140
无需锁定的向量搜索:为什么开发者喜欢ClickHouse
Python中的统计假设检验速查表
本文是一个机器学习项目中最流行的统计假设检验的速查表,包含使用Python接口的示例。
AiTechYun
2018/09/26
2.3K0
Python中的统计假设检验速查表
【资源】用深度学习解决自然语言处理中的7大问题,文本分类、语言建模、机器翻译等
摘要: 本文讲的是用深度学习解决自然语言处理中的7大问题,文本分类、语言建模、机器翻译等,自然语言处理领域正在从统计学方法转向神经网络方法。在自然语言中,仍然存在许多具有挑战性的问题。但是,深度学习方
小莹莹
2018/04/24
8990
【资源】用深度学习解决自然语言处理中的7大问题,文本分类、语言建模、机器翻译等
[Python从零到壹] 十.网络爬虫之Selenium爬取在线百科知识万字详解(NLP语料构造必备)
随着互联网和大数据的飞速发展,我们需要从海量信息中挖掘出有价值的信息,而在收集这些海量信息过程中,通常都会涉及到底层数据的抓取构建工作,比如多源知识库融合、知识图谱构建、计算引擎建立等。其中具有代表性的知识图谱应用包括谷歌公司的Knowledge Graph、Facebook推出的实体搜索服务(Graph Search)、百度公司的百度知心、搜狗公司的搜狗知立方等。这些应用的技术可能会有所区别,但相同的是它们在构建过程中都利用了Wikipedia、百度百科、互动百科等在线百科知识。所以本章将教大家分别爬取这三大在线百科。
Eastmount
2021/12/02
2K0
[Python从零到壹] 十.网络爬虫之Selenium爬取在线百科知识万字详解(NLP语料构造必备)
【资源】用深度学习解决自然语言处理中的7大问题,文本分类、语言建模、机器翻译等
【新智元导读】自然语言处理领域正在从统计学方法转向神经网络方法。在自然语言中,仍然存在许多具有挑战性的问题。但是,深度学习方法在某些特定的语言问题上取得了state-of-the-art的结果。这篇文章将介绍深度学习方法正在取得进展的7类自然语言处理任务。 自然语言处理领域正在从统计学方法转向神经网络方法。在自然语言中,仍然存在许多具有挑战性的问题。但是,深度学习方法在某些特定的语言问题上取得了state-of-the-art的结果。不仅仅是在一些benchmark问题上深度学习模型取得的表现,这是最有趣的
新智元
2018/03/22
8540
推荐阅读
相关推荐
如何用R和API免费获取Web数据?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验