Scrapy"报价教程" - 提取文本中的Unicode

时间:2016-12-17 13:36:17

标签: python-2.7 unicode scrapy scrapy-spider

我按照"教程"提取了引用的标题。在scrapy文档中。问题是,它在标题的开头和结尾给了我两个unicodes。

>>>quote = response.css("div.quote")[0]
>>> quote
<Selector xpath=u"descendant-or-self::div[@class and contains(concat(' ', normalize-space(@class), ' '), ' quote ')]" data=u'<div class="quote" itemscope itemtype="h'>
>>> title = quote.css("span.text::text").extract_first()
>>> title
u'\u201cThe world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.\u201d'
>>> 

在文档中,提取的标题如下所示:

>>>title
'"The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking."'
>>> 

我不确定我在这里做错了什么,只是按照文档。是否有东西要在配置文件中设置或如何解决这个问题? 没有提到解码/编码unicode。

其他示例

我继续使用scrapy文档,这是另一个例子:

Scrapy Shell输入:

>>> for quote in response.css("div.quote"):
...     text = quote.css("span.text::text").extract_first()
...     author = quote.css("small.author::text").extract_first()
...     tags = quote.css("div.tags a.tag::text").extract()
...     print(dict(text=text, author=author, tags=tags))

输出摘录:

{'text': u'\u201cTry not to become a man of success. Rather become a man of value.\u201d', 'tags': [u'humor', u'obvious', u'simile'], 'author': u'Albert Einstein'}
{'text': u'\u201cIt is better to be hated for what you are than to be loved for what you are not.\u201d', 'tags': [u'humor', u'obvious', u'simile'], 'author': u'Albert Einstein'}
{'text': u"\u201cI have not failed. I've just found 10,000 ways that won't work.\u201d", 'tags': [u'humor', u'obvious', u'simile'], 'author': u'Albert Einstein'}
{'text': u"\u201cA woman is like a tea bag; you never know how strong it is until it's in hot water.\u201d", 'tags': [u'humor', u'obvious', u'simile'], 'author': u'Albert Einstein'}
{'text': u'\u201cA day without sunshine is like, you know, night.\u201d', 'tags': [u'humor', u'obvious', u'simile'], 'author': u'Albert Einstein'}

网站我从:

[http://quotes.toscrape.com]

文档Scrapy(第20页):

https://media.readthedocs.org/pdf/scrapy/1.2/scrapy.pdf

系统:

macOS Darwin内核版本16。3。0:11月17日星期四20:23:58太平洋标准时间2016;根:XNU-3789.31.2〜1 / RELEASE_X86_64

virtualenv scrapy Python 2.7.10

更新

我尝试使用新的virtualenv Python 3.5.2 使用Python 3.5.2,我终于得到了正确的结果,没有像其他设置中那样的unicode问题。

1 个答案:

答案 0 :(得分:1)

您所看到的是字符串的调试表示,因为您只是在解释器中查看变量而不是打印它。在Python 2.7上,所有不可打印的非ASCII字符都显示转义码。在Python 3中,只有当前终端编码中可显示的字符才会显示为转义码。

打印字符串以强制显示字符。

>>> s=u'\u201cThe world\u201d'
>>> s
u'\u201cThe world\u201d'
>>> print s
“The world”

如果您打印的终端使用的编码不支持非ASCII字符,可能获得UnicodeEncodeError,但由于Python 3.5适用于您,终端必须支持他们。

请注意,调试显示还会显示表示Unicode字符串的u,并引用输出。 print只显示字符串内容。