2016-08-30 43 views
1

讀取URL時,當我嘗試刮維基百科網站在其URL中的特殊字符,使用urllib.request裏和Python,我得到以下錯誤UnicodeEncodeError: 'ascii' codec can't encode character '\xf8' in position 23: ordinal not in range(128)編碼誤差的urllib

代碼:

# -*- coding: utf-8 -*- 
import urllib.request as ur 

url = "https://no.wikipedia.org/wiki/Jonas_Gahr_Støre" 
r = ur.urlopen(url).read() 

如何使用utf-8編碼使用urllib.request?

+0

試圖在寫這乞討的文件? # - * - 編碼:utf-8 - * - –

+0

Python版本?在2.x和3.x系列之間Unicode處理髮生了徹底改變。 –

+0

你可以嘗試:.'r = ur.urlopen(url.decode('cp1252'))。read()' –

回答

1

顯然,urllib的只能處理ASCII的請求,以及您的網址轉換成ASCII給你的特殊字符的錯誤。 用%C3%B8代替ø,在http中對這個特殊字符進行編碼的正確方法似乎有訣竅。但是,我找不到像瀏覽器一樣自動執行此操作的方法。

例如:

>>> f="https://no.wikipedia.org/wiki/Jonas_Gahr_St%C3%B8re" 
>>> import urllib.request 
>>> g=urllib.request.urlopen(f) 
>>> text=g.read() 
>>> text[:100] 
b'<!DOCTYPE html>\n<html class="client-nojs" lang="nb" dir="ltr">\n<head>\n<meta charset="UTF-8"/>\n<title' 

回答上述不起作用,因爲他是編碼的請求被處理後,當你請求處理過程中出現錯誤。

+0

謝謝。我可以爲我需要的角色編寫一個手動轉換器。 – bjornasm

+0

這裏有一個函數可以引用一個URL作爲這個問題的一個問題。 –

+0

是的,但是urlquote會跳出網址中的斜線以及特殊字符 – mousetail

0

新計劃 - 使用請求

from bs4 import BeautifulSoup 
import requests 

def scrape(): 
    url = "http://no.wikipedia.org/wiki/Jonas_Gahr_Støre" 
    r = requests.get(url).content 
    soup = BeautifulSoup(r).encode('utf-8') 

    print soup 

    print r 

if __name__ == '__main__': 
    scrape() 
+0

謝謝你的回答 - 但是,我可悲得到同樣的錯誤。 – bjornasm

+0

現在試試吧,我稍微編輯了帖子 –

+0

這不行,可悲。檢查https://repl.it/languages/python3 – bjornasm

0

如果使用圖書館是一種選擇,我建議真棒requests

# -*- coding: utf-8 -*- 
import requests 
r = requests.get('https://no.wikipedia.org/wiki/Jonas_Gahr_Støre') 
print(r.text) 
-1

使用answer from @mousetail我寫了我所需要的字符的自定義編碼器:

def properEncode(url): 
    url = url.replace("ø", "%C3%B8") 
    url = url.replace("å", "%C3%A5") 
    url = url.replace("æ", "%C3%A6") 
    url = url.replace("Ø", "%C3%98") 
    url = url.replace("Å", "%C3%A5") 
    url = url.replace("Æ", "%C3%85") 
    return url 
+0

http://stackoverflow.com/questions/39229439/encoding-error-when-reading-url-with-urllib#comment65800916_39229882 –