我正在从网址抓取简单的文本文件。
def scrape_contents_ex(url):
data = urllib2.urlopen(url)
return data.read()
问题是它产生的字符串被换行符和制表符“\ t”,“\ r”等等。
示例:
当我在python中打印字符串输出时,它会呈现各种\字符:
我不知道如何正确处理我从urlopen读取的输出。我想将这些内容存储在postgresql中。此外,我还有另一个复杂因素,内容很可能产生unicode结果(中文字符,西里尔字母等)。
阅读和存储它的正确和有效方法是什么?
答案 0 :(得分:0)
您可以使用str.split()方法,但有很多选项可以解决此特定问题。
来自python 3.5.1 docs:
#!/usr/bin/python
# send content type
print("Content-Type: text/html\n\n")
print("Good")
你会想要像
这样的东西>>> '1,2,3'.split(',')
['1', '2', '3']
>>> '1,2,3'.split(',', maxsplit=1)
['1', '2,3']
>>> '1,2,,3,'.split(',')
['1', '2', '', '3', '']
结果是在' \ n \ t'的任何实例之间出现的字符串列表。在原始字符串中。
答案 1 :(得分:0)
您需要使用库'urllib','urllib2'来避免ecoding。
答案 2 :(得分: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。
然后在提示符下键入foo
,ipython
尝试显示foo
对象,它可能会调用repr(foo)
。
您看到的内容:"a\nb"
(repr()
调用的结果)是类型为str
(type(foo) == str
)的Python对象的可打印表示形式。 Python字符串文字使用相同的语法。反斜杠在字符串文字中是特殊的,例如,"\n"
是单字符(换行符 - ord("\n") == 10
)。如果要创建包含两个字符的字符串:backslash + n
,则必须转义反斜杠或使用原始字符串文字:
>>> "\\n" == r"\n" != "\n"
True