Scrappy 'метод re () не работает со строками Unicode - PullRequest
4 голосов
/ 06 марта 2012

Я работаю в Windows 7 и лоскутной интерактивной консоли (на основе 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 () с символами Юникода?

1 Ответ

4 голосов
/ 06 марта 2012

Похоже, что Scrapy не использует флаг re.UNICODE для своих регулярных выражений, поэтому \w не включает все определяемые Unicode символы "word".

Документы, кажется, указывают, что Scrapy's.re может принимать уже скомпилированное регулярное выражение, поэтому вы можете попробовать скомпилировать свое регулярное выражение с флагом UNICODE:

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