我正在使用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()吗?
答案 0 :(得分:4)
听起来Scrapy没有使用re.UNICODE
标志作为其正则表达式,因此\w
不包括所有Unicode定义的“单词”字符。
文档似乎表明Scrapy的.re
可以使用已编译的正则表达式,因此您可以尝试使用UNICODE
标志自行编译正则表达式:
import re
hxs.select('//title/text()').re(re.compile('(\w+)', re.UNICODE))