2017-04-07 58 views
2

我編寫了一個使用urllib獲取網頁中所有文章標題的程序(本例中爲nytimes.com)。只有一個問題。有些標題有分號,如果打印出來會導致醜陋的「There \ xe2 \ x80 \ x99s」。所以我試圖用\'替換\ xe2 \ x80 \ x99,但它似乎不起作用。我認爲元組有問題。不幸的是我不能創建一個元組,導致同樣的問題。Python3:編輯使用urllib獲取的數據

import urllib.request 
import urllib.parse 
import re 

url = 'https://www.nytimes.com/' 
headers = {} 
headers['User-Agent'] = 'Mozilla/5.0 (X11; Linux i686)' 

req = urllib.request.Request(url, headers = headers) 
resp = urllib.request.urlopen(req) 
resp_data = resp.read() 
par = re.findall(r'story-heading"><a href="(.*?)">(.*?)</a>',str(resp_data)) 

for n in par: 
print(n[1]) 
print(n[1].replace("\xe2\x80\x99","'")) 

我試圖從元組中創建字符串變量,但沒有任何工作。我知道BeautifulSoup還有另一個解決方案,但我想我會試着找到自己的方式。

回答

0

你必須改變這一行:

resp_data = resp.read() 

到:

resp_data = resp.read().decode("utf8") 

工作將完成。

解說

的網站使用ut8編碼,我猜,所以你必須decode返回字節爲utf8字符串,可以更好地代表喜歡你打算什麼都有。

PS:可以在decode()方法使用resp.read().decode()沒有參數,你讓Python猜測編碼類型。

+0

它的工作。 Tyvm :-) –

+0

希望它能幫助你。如果滿足您的需求,您可以上傳和/或接受此答案。 –

+1

謝謝,我做到了。新的論壇 –

0

您正在看到字符串的repr(),因此出現了有趣的字符。如果你想要,強制這個字符串。見我的結果:

>>> print repr(n[1]) 
'There\xe2\x80\x99s' 
>>> print str(n[1]) 
There’s 

總結:包裝你的N [1] STR()

+0

我已經試過了,不幸的是這並不能解決問題。儘管如此,我aprec。你的幫助意志。乾杯 –