【问题标题】:Full urls of images of a given page on Wikipedia (only those I see on the page)维基百科上给定页面的完整图片网址(仅限我在页面上看到的图片)
【发布时间】:2012-12-17 23:38:14
【问题描述】:

我想提取维基百科上“Google”页面的所有完整图片网址

我试过了:

http://en.wikipedia.org/w/api.php?action=query&titles=Google&generator=images&gimlimit=10&prop=imageinfo&iiprop=url|dimensions|mime&format=json

但是,通过这种方式,我也得到了与谷歌无关的图像,例如:

http://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg
http://upload.wikimedia.org/wikipedia/en/4/4a/Commons-logo.svg
http://upload.wikimedia.org/wikipedia/en/4/4a/Commons-logo.svg
http://upload.wikimedia.org/wikipedia/commons/f/fe/Crystal_Clear_app_browser.png

如何仅提取我在 Google page 上看到的图像

【问题讨论】:

  • 但是那些图片在那个关于谷歌的页面上,你没看到吗?
  • 好的,我的意思是只有那些在方框中环绕文本的图像
  • 为此,我认为您必须解析页面的源代码。
  • 应该是家常便饭。我想知道为什么 Wikipedia API 不提供它。这是维基百科,加油!
  • @user1028100:“这应该是很平常的事情。(……)”——不,不应该。对于读者来说,这些图片显然是不同的东西。但这种差异来自人们使用 MediaWiki 软件的方式,而不是该软件如何处理这些图片。这就是为什么 API 无法分辨哪些是与文章相关的图片,哪些只是装饰性图标。

标签: mediawiki wikipedia wikipedia-api wikimedia-commons


【解决方案1】:
  1. 检索页面源代码,https://en.wikipedia.org/w/index.php?title=Google&action=raw
  2. 扫描它以查找像[[File:Google web search.png|thumb|left|On February 14, 2012, Google updated its homepage with a minor twist. There are no red lines above the options in the black bar, and there is a tab space before the "+You". The sign-in button has also changed, it is no longer in the black bar, instead under it as a button.]] 这样的子字符串
  3. 请求 API 获取页面上的所有图片,http://en.wikipedia.org/w/api.php?action=query&titles=Google&generator=images&gimlimit=10&prop=imageinfo&iiprop=url|dimensions|mime&format=json
  4. 过滤掉与步骤 2 中找到的图片名称匹配的网址。

第 2 步和第 4 步需要更多解释。

@2。正则表达式/\b(File|Image):[^]|\n\r]+/ 应该足够了。在 Ruby 的正则表达式中,\b 表示您选择的语言可能不支持的单词边界。我建议的正则表达式将匹配我想到的所有案例:[[File:something.jpg]],图库标签:<gallery>\nFile:one.jpg\nFile:two.jpg\n</gallery>,模板:{{Infobox|pic = File:something.jpg}}。但是,它不会匹配包含] 的文件名。我不确定它们是否合法,但如果是,它们一定非常罕见,应该没什么大不了的。

如果你只想匹配这样的结构:[[File:something.jpg|thumb|description]],下面的正则表达式会更好:/\[\[(File|Image):[^]|]+/

@4。我会从名称中删除与/[^A-Za-z0-9]/ 匹配的所有字符。这比逃避它们更容易,而且在大多数情况下,足够了。

图标最常附加在模板中,与文章主题相关的图片相反,后者最常直接附加 ([[File:…]])。但也有例外,例如在某些文章中,图片附有 {{Gallery}} 模板。还有<gallery> 标签,它为画廊引入了特殊的语法。您必须根据您的需求调整我的解决方案,即使那样它也不会完美,但应该足够好。

【讨论】:

  • 也许在第 2 步中,只搜索File:name.ext?这样,即使是画廊和其他模板也可以工作。
  • @svick:图片名称可能包含空格和点(不仅表示扩展名)。我不知道如何在不检查周围环境的情况下编写好的正则表达式。
  • @svick:根据你的建议修改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多