零碎的';方法re()不';不能使用Unicode字符串

零碎的';方法re()不';不能使用Unicode字符串,unicode,scrapy,Unicode,Scrapy,我在Windows7和Scrasty交互控制台(基于IPython)中工作 我正在做教程中的步骤 如果我抓取一些带有英文字母标题的网站,一切正常,如教程中所示: In [5]: hxs.select('//title/text()').re('(\w+):')` Out[5]: [u'Computers', u'Programming', u'Languages', u'Python']` 但如果我用非英语字母(俄语、Unicode)抓取站点,re()方法不会返回任何内容: In [25]:

我在Windows7和Scrasty交互控制台(基于IPython)中工作

我正在做教程中的步骤

如果我抓取一些带有英文字母标题的网站,一切正常,如教程中所示:

In [5]: hxs.select('//title/text()').re('(\w+):')`
Out[5]: [u'Computers', u'Programming', u'Languages', u'Python']`
但如果我用非英语字母(俄语、Unicode)抓取站点,re()方法不会返回任何内容:

In [25]: hxs.select('//title/text()').re('(\w+)')
Out[25]: []
标题中有一些文本,它不是空的:

In [24]: hxs.select('//title/text()').extract()
Out[24]: [u'\u041b\u043e\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u043e\u0432']

帮帮我,我可以将scrapy're()与unicode符号一起使用吗?

听起来scrapy的正则表达式没有使用
re.unicode
标志,因此
\w
没有包括所有unicode定义的“word”字符

这些文档似乎表明Scrapy的
.re
可以使用已编译的正则表达式,因此您可以尝试使用
UNICODE
标志自己编译正则表达式:

import re
hxs.select('//title/text()').re(re.compile('(\w+)', re.UNICODE))

但是你知道为什么re.UNICODE标志在默认情况下不适用于regex吗?我希望Scrapy在内部设置该标志,但只看一下源代码。修复了