2009-09-03 68 views
0

URL http://www.fourmilab.ch/cgi-bin/Earth顯示地球的實時地圖。如何以編程方式在此頁面上獲取圖像?

如果我在瀏覽器(FF)中發佈此URL,圖像顯示正常。但是當我嘗試'wget'來獲取相同的頁面時,我失敗了!

這是我第一次嘗試:

wget -p http://www.fourmilab.ch/cgi-bin/Earth 

思維,也可能是所有其他形式的字段都需要太多,我做了一個「查看源文件」上面的頁面上,記下的各個字段的值,然後發出以下URL:

wget --post-data "opt=-p&lat=7°27'&lon=50°49'&ns=North&ew=East&alt=150889769&img=learth.evif&date=1&imgsize=320&daynight=-d" http://www.fourmilab.ch/cgi-bin/Earth 

還沒有圖片!

有人可以告訴我這裏發生了什麼...? CGI和/或基於form-POST的wgets是否有任何「陷阱」?哪裏(書或在線資源)能夠解釋這些概念?

+1

在我看來,圖像的來源是一樣的東西http://www.fourmilab.ch/cgi-bin/Earth?di=154E28F95D71B37CD7215CBD4AC02097A04D68525B48181BD029而不是你提。 – 2009-09-03 11:04:49

+0

從瀏覽器刷新每個頁面的圖像源/ URL正在改變。看起來,所有這些都是通過2個步驟完成的:動態生成新圖像和圖像路徑,然後將此圖像發送到客戶端。我不知道如何處理這個問題! – Harry 2009-09-03 11:19:49

回答

2

如果您要檢查頁面的源代碼,那裏面有一個與img的鏈接,其中包含地球的圖像。例如:

 
<img 
src="/cgi-bin/Earth?di=570C6ABB1F33F13E95631EFF088262D5E20F2A10190A5A599229" 
ismap="ismap" usemap="#zoommap" width="320" height="320" border="0" alt="" /> 

不給「迪」參數,你只是要求整個網頁,用引用這個形象,而不是圖像本身。

編輯:「迪」參數編碼要接受,反正地球的「一部分」,嘗試例如

 
wget http://www.fourmilab.ch/cgi-bin/Earth?di=F5AEC312B69A58973CCAB756A12BCB7C47A9BE99E3DDC5F63DF746B66C122E4E4B28ADC1EFADCC43752B45ABE2585A62E6FB304ACB6354E2796D9D3CEF7A1044FA32907855BA5C8F 

+0

是的,我也看到了。但是,正如我在對布拉德迴應的評論中所說的那樣,在每一次頁面刷新時,這個di值都發生了變化。所以,問題是:如何才能找到圖像網址,然後我就可以開啓它了? – Harry 2009-09-03 11:22:04

+0

,您將得到一個長文件名爲'Earth \?di \ = F5AEC ...'的文件,它是一個jpeg文件。非常聰明! – pavium 2009-09-03 11:26:38

+0

@somedeveloper:只有當您更改想要獲取圖像的極座標時,Di纔會更改。如果你想得到一些特定的座標,你應該解析第一頁的結果,你實際上在下面做了2個答案。 @pavium:文件名可以更改,大多數程序可以將數據流傳輸到標準輸出,並可以將其重定向到任何文件或設備,所以這不是問題。 – 2009-09-03 12:26:10

1

使用GET而不是POST。它們與後臺CGI程序完全不同。

0

你下載的是整個HTML頁面,而不是圖像。要下載圖片和其他元素,您需要使用--page-requisites(可能還有--convert-links)參數。不幸的是,因爲robots.txt不允許訪問/cgi-bin/下的URL,wget不會下載位於/cgi-bin/下的圖像。 AFAIK沒有參數來禁用機器人協議。

1

從Ravadre繼,

wget -p http://www.fourmilab.ch/cgi-bin/Earth 

下載包含一個<IMG>標籤的XHTML文件。

我編輯了XHTML以除去img標籤之外的所有內容,並將其轉換爲包含另一個wget -p命令的bash腳本,從而避開了?和=

當我執行此我有我改名earth.jpg

不是真的綱領性,我做到了的方式14KB文件,但我認爲這是可以做到。

但是正如@somedeveloper所言,di值正在變化(因爲它取決於時間)。

+0

謝謝,我會把它包裝在腳本中。 – Harry 2009-09-03 11:56:35

0

夥計們,這是我最終做的。對這個解決方案並不滿意,因爲我曾經(並且仍然)希望有更好的方式......一個能夠獲得第一個wget本身的圖像......給我通過firefox瀏覽時獲得的相同用戶體驗。

#!/bin/bash 

tmpf=/tmp/delme.jpeg 
base=http://www.fourmilab.ch 
liveurl=$(wget -O - $base/cgi-bin/Earth?opt=-p 2>/dev/null | perl -0777 -nle 'if([email protected]<img \s+ src \s* = \s* "(/cgi-bin/Earth\?di= .*?)" @gsix) { print "$1\n" }') 
wget -O $tmpf $base/$liveurl &>/dev/null 
相關問題