2012-03-06 12 views
4

私はWindows 7とscrappy interactive console(IPythonベース)で作業しています。Scrappyのメソッドre()はUnicode文字列では機能しません

私は英語の手紙のタイトルといくつかのサイトをつかむ場合、私はチュートリアル

にステップTrying Selectors in the Shellをやっている、すべてのチュートリアルのように、大丈夫です:

In [5]: hxs.select('//title/text()').re('(\w+):')` 
Out[5]: [u'Computers', u'Programming', u'Languages', u'Python']` 

しかし、私は非でサイトをつかむ場合 - 英語の文字(ロシア語、ユニコード)、再()メソッドは何も返しません:タイトルにテキストがあり

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記号とのrerapy()を使用できますか?

答えて

4

Scrapyのようなサウンドは、正規表現にre.UNICODEフラグを使用していないため、\wにはすべてのUnicode定義の「単語」文字が含まれていません。

ドキュメントは、あなたがUNICODEフラグを使用して正規表現を自分でコンパイルしてみてくださいできるようScrapyの.reは、コンパイル済みの正規表現を取ることができることを示しているように見える:

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

は、コンパイル済みのregeexは細かい作業、ありがとうございます! –

+0

しかし、re.UNICODEフラグdoenstがregexにデフォルトで適用される理由はありますか? –

+0

私はScrapyがそのフラグを内部的に設定することを期待していましたが、ソースコードを見ると[そうでないことを示しています](https://github.com/scrapy/scrapy/blob/0.15.1/scrapy/utils/misc.py #L69)。 –

関連する問題