2014-12-05 67 views
0

我想使用urllib3和美麗的湯來刮一些網站。 Python 3的編碼/解碼讓我失望。這是我的代碼Python編碼的字符串仍然是二進制格式

r = http.request('GET', 'https://www.************************.jsf') 

if(r.status == 200): 
    page = r.data.decode('utf-8') 
    soup = BeautifulSoup(page) 

    print(soup.prettify()) 
    #This prints - [Decode error - output not utf-8] 
    #    [Decode error - output not utf-8] 

    print(soup.prettify().encode('utf-8')) 
    #This prints the data but with binary mark 
    # b'<!DOCTYPE html PUBLIC "-//W3C//D....... 
    #..........................................' 

正如我打電話美麗的湯之前完成解碼r.data.decode('utf-8'),爲什麼我需要再次進行編碼,爲什麼它仍然顯示B「」標誌,甚至將其轉換爲字符串後

+0

「數據」屬性沒有記錄。爲什麼沒有'getresponse()'調用? – 2014-12-05 11:40:24

+0

我正在閱讀readthedocs上的urllib3文檔。找不到任何對getresponse()的引用。此外,數據屬性幾乎是訪問那裏的響應內容的唯一方法..'https:// urllib3.readthedocs.org/en/latest/index.html'。也許我錯過了一些東西。 – 2014-12-05 11:58:03

回答

0

b'xxx'是二進制類型值中的字節(序列的表示 - 它是.encode()的自然結果,如果它不是一個字符串的print()功能自動將對象到它表示

嘗試寫入的。調試信息到文件中函數可能在輸出到支持某些字符集/編碼的控制檯時遇到問題。