2012-12-17 23 views
2

我想提取維基百科完整的URL(僅適用於那些我在網頁上看到)

「谷歌」的頁面圖像的所有完整的URL

我有試過:

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

看到的影像
+2

但是那些圖片在Google的那個頁面上,你沒有看到它們嗎? – Bergi

+0

好的,我的意思是隻有那些包裝文字的方形框的圖像 – sparkle

+0

爲此,我認爲你將不得不解析頁面的源代碼。 – svick

回答

5
  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中
  5. 發現

步驟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>標籤,它爲畫廊引入了特殊的語法。你必須根據你的需求調整我的解決方案,即使這樣也不會完美,但它應該足夠好。

+1

也許在第2步中,只搜索'File:name.ext'?這樣,即使畫廊和其他模板也可以工作。 – svick

+0

@svick:圖片名稱可能包含空格和點(不僅僅表示擴展名)。我不知道如何編寫好的正則表達式,而不檢查周圍的情況。 – skalee

+0

@svick:根據你的建議修改。 – skalee