我使用scrapy xpath + re从网页中提取数据。字符是unicode(俄语),所有要提取的字符串都包含长短划线(python code' \ u2014') 问题是我的正则表达式无法找到一个完整的字符串并通过长划线将其拆分。这对我来说真的很不方便。 以下是我已经尝试过的一些例子,但它没有成功:
response.xpath('some xpath goes here').re(r'[\w\s\\u2014\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s\\u2014\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s\\x2014\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s\\uFFFF\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s\.,—]+')
response.xpath('some xpath goes here').re(r'[\w\s\u(\w){4}\.,]+')
response.xpath('some xpath goes here').re(r'[\w\s(\u(\d)){6}\.,]+')
版本:Python 2.7,Scrapy 0.24.6
答案 0 :(得分:1)
将您的模式转换为unicode字符串,不要逃避\
。
response.xpath('some xpath goes here').re(ur'[\w\s\u2014\.,]+')
此外,我猜您可能希望使用re.UNICODE
标记,因此\w
和\s
将匹配所有Unicode字和空白字符。根据Scrapy文档selector.re
不支持标志,但它可以使用编译的正则表达式,所以你可以这样做:
import re
response.xpath('some xpath goes here').re(re.compile(ur'[\w\s\u2014\.,]+', re.UNICODE))