Kei*_*cht 6 wikipedia wikipedia-api mediawiki-api
我正在尝试在维基百科上找到所有图像的完整列表,然后我可以将其过滤到公共域图像.我从这里下载了SQL转储:
http://dumps.wikimedia.org/enwiki/latest/
并研究了数据库架构:
我想我理解它但是当我从维基百科页面中选择一个示例图像时,我无法在转储中的任何地方找到它.例如:
http://en.wikipedia.org/wiki/File:Carrizo_2a.JPG
我已经在转储'图像','imagelinks'和'page'上搜索'Carrizo_2a.JPG'并且找不到它.
这些转储不完整吗?我误解了结构吗?有一个更好的方法吗?
另外,向前迈出一步:在我过滤了我的列表并且我想下载大量图像(数千)之后,我看到一些提及我需要从网站的镜像中执行此操作以防止重载wikipedia/wikimedia .如果对此也有任何指导,那将会有所帮助.
Ilm*_*nen 10
MediaWiki将文件数据存储在两个或三个位置,具体取决于您的计算方式:
当前文件版本的实际元数据存储在image表中.这可能是你最想要的; 你会在这里找到最新的en.wikipedia转储.
旧的取代文件修订的数据被移动到oldimage表中,该表具有与表基本相同的结构image.此表也被转储,最新的一个就在这里.
最后,每个文件(通常)也对应于命名空间6(File:)中非常普通的wiki页面.您将在XML转储中找到这些文本,与任何其他页面相同.
哦,你在英语维基百科转储中找不到你链接到的那些文件的原因是它们来自维基共享资源的共享存储库.您将在Commons数据转储中找到它们.
至于下载实际文件,这里是(显然)官方文档. 据我所知,所有他们的意思是" 批量下载目前(截至2012年9月)可从镜像获得,但不是直接从维基媒体服务器提供. "如果你想要所有图像在tarball中,你将拥有使用镜子.如果你只是在维基百科和/或下议院的图像上拉出数百万的相对较小的子集,那么直接使用维基媒体服务器应该没问题.
只记得行使基本的礼貌:发送一个标识自己的用户代理字符串,不要太难打中服务器.特别是,我建议按顺序运行下载,这样您只有在完成上一个文件后才开始下载下一个文件.这不仅比并行下载更容易实现,而且它确保您不会占用超过您的带宽份额,并允许下载速度或多或少地自动适应服务器负载.
PS.无论是从镜像下载文件还是直接从维基媒体服务器下载文件,您都需要确定它们所在的目录.典型的Wikipedia文件URL如下所示:
http://upload.wikimedia.org/wikipedia/en/a/ab/File_name.jpg
Run Code Online (Sandbox Code Playgroud)
其中" wikipedia/en"部分标识维基媒体项目和语言(由于历史原因,Commons列为" wikipedia/commons")," a/ab"部分由UTF-8中文件名的MD5哈希的前两个十六进制数字给出(因为它们'在数据库转储中重新编码).