2016-05-01 40 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