我正在 Windows 7 和 scrappy 交互式控制台(基于 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']
帮帮我,我可以将 scrapy' re() 与 unicode 符号一起使用吗?
最佳答案
听起来 Scrapy 的正则表达式没有使用 re.UNICODE
标志,因此 \w
不包含所有 Unicode 定义的“单词”字符。
文档似乎表明 Scrapy 的 .re
可以采用已编译的正则表达式,因此您可以尝试使用 UNICODE
标志自行编译正则表达式:
import re
hxs.select('//title/text()').re(re.compile('(\w+)', re.UNICODE))
关于unicode - Scrappy 的方法 re() 不适用于 Unicode 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577042/