Полные URL изображений данной страницы в Википедии (только те, которые я вижу на странице)

Я хотел бы извлечь все полные URL изображений страницы "Google" в Википедии

Я пытался с:

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

но, таким образом, я получил также не связанные с Google изображения, такие как:

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?

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. Отфильтруйте URL-адреса, но те, которые соответствуют именам изображений, найденным на шаге 2.

Шаги 2 и 4 нуждаются в дополнительном объяснении.

@ 2. Regexp /\b(File|Image):[^]|\n\r]+/ должно быть достаточно. В регулярных выражениях Руби \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> тег, который вводит специальный синтаксис для галерей. Ты должен настроить мое решение под свои нужды, и даже тогда оно не будет идеальным, но оно должно быть достаточно хорошим.

Другие вопросы по тегам