2016-05-01 26 views
0

我正在從網址中抓取簡單的文本文件。urlopen用換行嗆着我

def scrape_contents_ex(url): 
    data = urllib2.urlopen(url) 
    return data.read() 

的問題是,它產生被阻塞新行和製表符 「\ t」 的, 「\ R」 等字符串

實施例:

這裏是網頁 enter image description here

當我用python打印字符串輸出時,它用各種\字符呈現:

enter image description here

我不知道如何正確處理從urlopen讀取的輸出。我想將這些內容存儲在postgresql中。此外,我還有一個複雜的地方,內容很可能會產生unicode結果(漢字,西里爾等)。

什麼是正確和健壯的方式來閱讀和存儲這個?

回答

0

您可以使用str.split()方法,但有很多選項可以解決這個特定的問題。

從Python 3.5.1文檔:

>>> '1,2,3'.split(',') 
['1', '2', '3'] 
>>> '1,2,3'.split(',', maxsplit=1) 
['1', '2,3'] 
>>> '1,2,,3,'.split(',') 
['1', '2', '', '3', ''] 

你會想是

return data.read().split('\n\t') 

結果是在 '\ n \ t' 的任何實例之間發生的字符串列表你的原始字符串。

+0

完全無關的,你問什麼,但我發現請求庫比好得多urllib2的。 – ajthyng

0

foo你的情況字節字符串。如果它代表文字;在將其存儲在PostgreSQL中之前,應將其解碼爲Unicode:text = foo.decode(character_encoding)字符集可能取決於Content-Type。見A good way to get the charset/encoding of an HTTP response in Python

然後在提示符處輸入fooipython嘗試顯示foo對象,它可能會調用repr(foo)

看到的內容:"a\nb"repr()調用的結果)是類型爲strtype(foo) == str)的Python對象的可打印表示形式。 Python字符串文字使用相同的語法。反斜槓是字符串中的特殊字符例如"\n"單個字符(換行符-ord("\n") == 10)。如果你想創建一個包含兩個字符的字符串:backslash + n,那麼你必須轉義反斜線或使用原始字符串字面量:

>>> "\\n" == r"\n" != "\n" 
True