2009-12-13 63 views
0

urllib2.urlopen(theurl).read() ...這下載文件。這個urllib2 python代碼會下載文件的頁面嗎?

urllib2.urlopen(theurl).geturl() ...是否下載文件? (多長時間服用)

+0

爲了記錄,因爲我的回答並不完全正確,我認爲你應該把我接受的答案轉換爲RichieHindle的答案。我試圖刪除它,但不會讓我刪除接受的答案。 – Roman 2009-12-28 23:59:59

回答

3

它沒有。 對我來說,在google.com上測試:

x= time.time(); urllib2.urlopen("http://www.google.com").read(); print time.time()-x 
0.166881084442 

x= time.time(); urllib2.urlopen("http://www.google.com").geturl(); print time.time()-x 
0.0772399902344 
+0

爲什麼低估這個人?答案很好。它證明了它! – TIMEX 2009-12-13 09:31:15

+0

謝謝亞歷克斯。 downvote我有點困惑。 – Roman 2009-12-13 09:34:04

+2

這個答案可能是錯誤的,因爲'geturl()'*會*下載(某些)文件。測試它是否下載文件的方法是使用Wireshark之​​類的東西來查看網絡流量,而不是使用計時器。如果問題是「geturl()'下載整個文件,即使它很大?」那麼答案是「不」,很公平。但它並不像這個答案那樣明確,而且使用計時器來推斷網絡上發生的事情是不可靠的。 – RichieHindle 2009-12-13 11:18:19

5

documentation

使用getURL()方法返回的真正 URL頁面。在某些情況下,HTTP服務器會將客戶端重定向到另一個URL,即 。 urlopen()函數 處理這個透明,但在 一些情況下,調用者需要知道 哪個URL客戶端被重定向到 。 geturl()方法可用於在此重定向的URL處獲取 。

+1

這都是事實,但它沒有回答這個問題。 – RichieHindle 2009-12-13 09:06:42

1

No. geturl()返回url。

例如; urllib2.urlopen("http://www.python.org").geturl()返回字符串'http://www.python.org'。

你可以很容易地在Python交互式shell中找到這種東西,例如:

$ python 
Python 2.4.3 (#1, Jul 27 2009, 17:57:39) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import urllib2 
>>> u = urllib2.urlopen("http://www.python.org") 
>>> u.geturl() 
'http://www.python.org' 
>>> 
4

測試了Wireshark和Python 2.5:urllib2.urlopen(theurl).geturl()下載身體的某些。它發出一個GET,讀取頭部和身體的幾個K,然後停下來。

+0

是的,這是因爲重定向 - 我假設urllib2支持正確的(http 301/302)重定向和「 Kimvais 2009-12-13 09:07:21

+0

'geturl()'不下載任何內容,'urllib2.urlopen(theurl)'。 – 2009-12-13 12:47:05

+0

@LukášLalinský:你用網絡監控工具測試過,是嗎?當我這樣做時,我查看了URL http://entrian.com/source-search,它確實*下載了一些內容。 – RichieHindle 2009-12-13 14:02:25

1

urllib2.urlopen()返回一個類似於對象的文件,以便在使用urlopen()時實際下載文檔並將其加載到機器的內存中,您可以使用文件函數來讀取寫入文件...

q若要店python.org到本地文件d:\ python.org.html

from urllib2 import urlopen 
doc = urlopen("http://www.python.org") 
html=doc.read() 
f=open("d:/python.org.html","w+") 
f.write(html) 
f.close() 

,或者乾脆利用的urllib

import urllib 
urllib.urlretrieve("http://www.python.org","d:/python.org.html") 

希望幫助;)