2012-03-06 119 views
4

我正在使用Windows 7和scrappy交互式控制檯(基於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']` 

但是,如果我搶到網站與非 - 英語字母(俄羅斯,Unicode的),重()方法不返回任何東西:

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符號嗎?

回答

4

Scrapy的聲音沒有爲其正則表達式使用re.UNICODE標誌,因此\w不包括所有由Unicode定義的「字」字符。

該文檔似乎表明Scrapy的.re可以採取已編譯的正則表達式,所以你可以嘗試編譯你自己的正則表達式與UNICODE標誌:

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

謝謝,已經編譯regeex做工精細! – 2012-03-06 03:26:36

+0

但是你有什麼想法爲什麼re.UNICODE標誌默認情況下適用於正則表達式? – 2012-03-06 03:28:04

+0

我會希望Scrapy在內部設置該標誌,但是在源代碼中查看[否則指示](https://github.com/scrapy/scrapy/blob/0.15.1/scrapy/utils/misc.py #L69)。 – 2012-03-06 03:38:31

相關問題