2013-02-13 113 views
0

我是python的新手,我正在嘗試學習一些新的模塊。幸運的是,不幸的是,我拿起urllib2模塊,並開始使用它與一個URL導致我的問題。關於在python中處理重定向

首先,我創建了Request對象,然後在響應對象上調用Read()。這是失敗的。發現它獲得重定向,但錯誤代碼仍然是200.不知道發生了什麼事。這裏是代碼 -

def get_url_data(url): 
    print "Getting URL " + url 
    user_agent = "Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1" 
    headers = { 'User-Agent' : user_agent } 
    request = urllib2.Request(url, str(headers)) 

    try:  
     response = urllib2.urlopen(request) 
    except urllib2.HTTPError, e: 
     print response.geturl() 
     print response.info() 
     print response.getcode() 
     return False; 
    else: 
     print response 
     print response.info() 
     print response.getcode() 
     print response.geturl() 
     return response 

我打電話上述功能與http://www.chilis.com

我期待收到301,302,303或而是我看200。這裏是我的反應看 -

Getting URL http://www.chilis.com 
<addinfourl at 4354349896 whose fp = <socket._fileobject object at 0x1037513d0>> 
Cache-Control: private 
Server: Microsoft-IIS/7.5 
SPRequestGuid: 48bbff39-f8b1-46ee-a70c-bcad16725a4d 
X-SharePointHealthScore: 0 
X-AspNet-Version: 2.0.50727 
X-Powered-By: ASP.NET 
MicrosoftSharePointTeamServices: 14.0.0.6120 
X-MS-InvokeApp: 1; RequireReadOnly 
Date: Wed, 13 Feb 2013 11:21:27 GMT 
Connection: close 
Content-Length: 0 
Set-Cookie: BIGipServerpool_http_chilis.com=359791882.20480.0000; path=/ 

200 
http://www.chilis.com/(X(1)S(q24tqizldxqlvy55rjk5va2j))/Pages/ChilisVariationRoot.aspx?AspxAutoDetectCookieSupport=1 

有人能解釋一下這個網址有,如何處理這個我知道我可以使用從Diveintopython.net「處理重定向」部分也與該網頁我看到的代碼?相同的反應200.

編輯:使用從DiveintoPython的代碼,我看到它的臨時重定向。我不明白的是爲什麼代碼中的HTTP錯誤代碼是200.這不是真的返回代碼嗎?編輯2:現在我看到它更好,它不是一個奇怪的重定向。我正在編輯標題。編輯3:如果urllib2自動執行重定向,我不確定爲什麼下面的代碼沒有得到chilis.com的首頁。

docObj = get_url_data(url) 
doc = docObj.read() 
soup = BeautifulSoup(doc, 'lxml') 
print(soup.prettify()) 

如果我使用的瀏覽器終於​​結束了被重定向到它的工作原理(http://www.chilis.com/EN/Pages/home.aspx「)。

+0

@Martijn謝謝! – R11 2013-02-13 11:36:11

回答

2

urllib2自動跟隨重定向的URL,因此,您所看到的信息是,這是該頁面。重定向到

如果你不希望它跟隨重定向,你需要繼承urllib2.HTTPRedirectHandler這裏有一個相關的SO張貼關於如何做到這一點:How do I prevent Python's urllib(2) from following a redirect

關於編輯3:它看起來像www.chilis.com需要接受cookie。這可以使用urllib2來實現,但我會建議安裝requests模塊(http://pypi.python.org/pypi/requests/)。

下似乎做你想要什麼(沒有任何錯誤處理):

import requests 

r = requests.get(url) 
soup = BeautifulSoup(r.text, 'lxml') 
print(soup.prettify()) 
+0

感謝您的回覆。理解爲什麼我看到200.你能看到上面的EDIT3的後續問題嗎? – R11 2013-02-13 12:24:23

+0

謝謝!不知道請求模塊。 – R11 2013-02-13 13:08:17

+0

你知道請求模塊是如何在內部完成的嗎?它會發送一些假餅乾嗎? – R11 2013-02-13 13:09:30

相關問題