【问题标题】:Finding and downloading images within the Wikipedia Dump在 Wikipedia Dump 中查找和下载图像
【发布时间】:2013-04-05 21:50:19
【问题描述】:

我正在尝试查找维基百科上所有图像的完整列表,然后我可以将其过滤到公共领域的图像。我已经从这里下载了 SQL 转储:

http://dumps.wikimedia.org/enwiki/latest/

并研究了 DB 架构:

http://upload.wikimedia.org/wikipedia/commons/thumb/4/42/MediaWiki_1.20_%2844edaa2%29_database_schema.svg/2193px-MediaWiki_1.20_%2844edaa2%29_database_schema.svg.png

我想我明白了,但是当我从维基百科页面中选择一个示例图像时,我在转储中的任何地方都找不到它。例如:

http://en.wikipedia.org/wiki/File:Carrizo_2a.JPG

我已经对转储“image”、“imagelinks”和“page”进行了 grep 查找,以寻找“Carrizo_2a.JPG”,但没有找到。

这些转储不完整吗?我误解了结构吗?有一个更好的方法吗?

另外,向前一步:在我过滤掉我的列表并且我想下载大量图像(数千张)之后,我看到一些人提到我需要从网站的镜像中执行此操作以防止超载维基百科/维基媒体。如果对此也有任何指导,那将很有帮助。

【问题讨论】:

标签: wikipedia wikipedia-api mediawiki-api


【解决方案1】:

MediaWiki 将文件数据存储在两个或三个位置,具体取决于您的计数方式:

  • 当前文件版本的实际元数据存储在image 表中。这可能是您主要想要的;你会发现它的最新 en.wikipedia 转储 here

  • 旧被取代文件修订的数据被移动到oldimage 表,该表与image 表具有基本相同的结构。这张表也被转储了,最新的是here

  • 最后,每个文件也(通常)对应于命名空间 6 (File:) 中的一个非常普通的 wiki 页面。您可以在 XML 转储中找到这些文本,与任何其他页面相同。

哦,您在英文维基百科转储中找不到链接到的文件的原因是它们来自 Wikimedia Commons 的共享存储库。您可以在 Commons data dumps 中找到它们。

至于下载实际文件,here's the (apparently) official documentation. 据我所知,他们的意思是“目前(截至 2012 年 9 月)可以从镜像中获得批量下载,但不直接从 Wikimedia 服务器提供。" 是如果你想要一个 tarball 中的所有图像,你将不得不使用一个镜像。如果您只提取 Wikipedia 和/或 Commons 上数百万图像中的一小部分,那么直接使用 Wikimedia 服务器应该没问题。

请记住保持基本礼貌:发送user-agent string 表明您的身份,不要对服务器造成太大压力。特别是,我建议您按顺序运行下载,这样您只有在完成前一个文件后才开始下载下一个文件。无论如何,这不仅比并行下载更容易实现,而且它确保您不会占用超过您的带宽份额,并允许下载速度或多或少地自动适应服务器负载。

附言。无论您是从镜像下载文件还是直接从 Wikimedia 服务器下载文件,您都需要确定它们位于哪个目录。典型的 Wikipedia 文件 URL 如下所示:

http://upload.wikimedia.org/wikipedia/en/a/ab/File_name.jpg

其中“wikipedia/en”部分标识维基媒体项目和语言(出于历史原因,Commons 被列为“wikipedia/commons”),the "a/ab" part 由 MD5 哈希的前两个十六进制数字给出UTF-8 格式的文件名(因为它们在数据库转储中编码)。

【讨论】:

  • 非常感谢!我还没有进入批量下载部分,但我没有意识到有两个独立的数据存储库。我现在正在导入它们,但是快速的“grep”确认我丢失的文件在公共文件中。维基百科/媒体肯定不会让理解这些东西变得容易。 :)
  • 一切都很顺利,除了我想弄清楚如何根据公共领域的内容过滤我选择的图像。我在“图像”表或“页面”表中找不到此信息。我认为它可能只存在于页面本身的内容中。例如请参阅本页的“许可”部分:en.wikipedia.org/wiki/File:Carrizo_2a.JPG 所以我正在下载这个文件:dumps.wikimedia.org/enwiki/latest/… 但我希望找到一个 SQL 版本以便于操作。有什么建议么?我在正确的轨道上吗?
  • 我应该补充一下,在这个页面上它说“所有页面和链接的 SQL 文件也可用。”这就是让我知道它们可能存在于某个地方的线索。
  • 是的,MediaWiki 用于存储许可证元数据的系统(或者,更确切地说,缺少任何此类系统)很糟糕。至少对于 Commons,您可能能够从 categorylinks 表转储中提取许可证数据,因为所有 Commons 许可证模板都将它们使用的文件页面添加到 hidden categories 下的 commons.wikimedia.org/wiki/Category:Copyright_statuses 。我相信英文维基百科也有类似的系统,根目录在en.wikipedia.org/wiki/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
相关资源
最近更新 更多