urlopen用换行符窒息我

时间:2016-05-01 02:30:40

标签: python postgresql unicode 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结果(中文字符,西里尔字母等)。

阅读和存储它的正确和有效方法是什么?

3 个答案:

答案 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。

您可以查看以下链接 https://docs.python.org/2/howto/urllib2.html

答案 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

然后在提示符下键入fooipython尝试显示foo对象,它可能会调用repr(foo)

您看到的内容:"a\nb"repr()调用的结果)是类型为strtype(foo) == str)的Python对象的可打印表示形式。 Python字符串文字使用相同的语法。反斜杠在字符串文字中是特殊的,例如,"\n"字符(换行符 - ord("\n") == 10)。如果要创建包含两个字符的字符串:backslash + n,则必须转义反斜杠或使用原始字符串文字:

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