Scrappy'方法re()不适用于Unicode字符串

时间:2012-03-06 02:18:21

标签: unicode scrapy

我正在使用Windows 7和干扰的交互式控制台(基于IPython)。

我正在教程

中执行步骤Trying Selectors in the Shell

如果我抓住一些带有英文字母标题的网站,一切都没问题,就像在教程中一样:

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']

帮助我,我可以使用带有unicode符号的scrapy're()吗?

1 个答案:

答案 0 :(得分:4)

听起来Scrapy没有使用re.UNICODE标志作为其正则表达式,因此\w不包括所有Unicode定义的“单词”字符。

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

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