我按照"教程"提取了引用的标题。在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'}
网站我从:
文档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问题。
答案 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
只显示字符串内容。