2011-06-23 45 views
12

我想了解urllib2如何工作,以及如何封裝其各種組件之前發出一個實際的請求或響應。什麼urllib2.Request(<url>)做,我如何打印/查看它

到目前爲止,我有:

theurl = "www.example.com" 

這顯然指定URL來看待。

req = urllib2.Request(theurl) 

不知道這是什麼,因此問題。

handle = urllib2.urlopen(req) 

這個人得到的頁面,並做所有的要求和所需的答覆。

所以我的問題是,urllib2.Request實際上做了什麼?

要嘗試看看它得到一個想法,我想

print req 

和剛剛

<urllib2.Request instance at 0x123456789> 

我也試過

print req.read() 

,並得到:

Traceback (most recent call last): 
    File "<stdin>", line 1, in ? 
    File "/usr/lib64/python2.4/urllib2.py, line 207, in `__`getattr`__` 
     raise AttributeError, attr 
AttributeError: read 

所以我顯然做錯了什麼。如果任何人都可以幫助我的兩個問題中的一個,那就太好了。

+2

http://docs.python.org/library/urllib2.html – Blair

+2

@Blair,最後我檢查python的'urllib2'文檔並不是很好...... Michael Foord在這裏有一個相當不錯的docset:http://www.voidspace.org.uk/python/articles/urllib2.shtml –

+0

-3?男人,這很苛刻。如何提高投票幾個問題呢? – MatthewD

回答

14

類 「請求」 你問: http://docs.python.org/library/urllib2.html#urllib2.Request

類urllib2.Request(URL [數據] [, 標題] [,origin_req_host] [, 無法覈實])

這個類是一個URL 請求的抽象。

你真正想要做一個請求(它可以接受一個Request對象或一個包裹在你身邊一個鄧賢蘭URL字符串)構建一個Request對象)的功能:http://docs.python.org/library/urllib2.html#urllib2.urlopen

urllib2.urlopen(URL [,data] [,timeout]) 打開URL url,它可以是字符串,也可以是Request對象。

實施例:

theurl = "www.example.com" 
try: 
    resp = urllib2.urlopen(theurl) 
    print resp.read() 
except IOError as e: 
    print "Error: ", e 

實施例2(與Request):

theurl = "www.example.com" 
try: 
    req = urllib2.Request(theurl) 
    print req.get_full_url() 
    print req.get_method() 
    print dir(req) # list lots of other stuff in Request 
    resp = urllib2.urlopen(req) 
    print resp.read() 
except IOError as e: 
    print "Error: ", e 
3

urllib2.Request()看起來像一個函數調用,但不是 - 它是一個對象構造函數。它從urllib2模塊創建一個類型爲Request的對象,記錄爲here

因此,它可能不會做任何事情,除了初始化本身。您可以通過查看應該位於Python安裝的lib目錄中的源代碼(urllib2.py,至少在Python 2.x中)來驗證這一點。

+0

感謝您的回覆。 @ S.Lott - 我對Request的目的更感興趣。閱讀手柄比我想看到的還要進一步。 @Bliar - 感謝您的指導,我曾在那裏看過,但邁克說這是描述,如果很差。 @Maike - 感謝您的鏈接,這是我之後的解釋。現在有道理。 仍然不確定爲什麼我不能打印/查看請求對象的內容。 – user788462

+0

感謝您的建議,但與S.Lott相同,它不會向我提供我希望看到的信息。打印「處理」只是打印收集的網頁。我希望看到「req」以及它在投入urlopen之前如何使用「theurl」以及它給出的任何其他輸入。 @哨兵 - 祝你有美好的一天:)。看起來你是缺乏基礎研究的人。 – user788462

+0

好的,我編輯了我的答案。希望它更有用。 – MatthewD