scrapy问题:xpath&正则表达式 - 正则表达式不能正常工作

时间:2014-09-28 11:07:23

标签: python regex xpath scrapy

这里是上下文:我正在尝试在网站上检索几个日期,并将它们放入“加倍列表”中,如下所示:

[[day1start,month1start,year1start,day1end,month1end,year1end], [day2,month2,year2, None, None, None]]

注意:在第二个日期,要检索的日期只有一天。

所以日期在HTML代码中组织如下:

<div class= "eventDate">
<div class="date">
13-Sep-2014
- 14-Sep-2014
</div>
<div class="date">
05-Jul-2014
</div>
<div class="date">
09-Aug-2014
</div></div>

所以在这里我想使用XPATH和REGEX完全如下:

[
["13", "Sep", "2014", "14", "Sep", "2014"],
["05", "Jul", "2014", , , ],
["09", "Aug", "2014", , , ]
]

所以我使用这个Xpath来得到我想要的东西:

dates = response.xpath('//div[@class="eventDate"]/div[@class="date"]/p[1]/text()')

当我“打印日期”时,它会返回以下内容:

[<Selector xpath='//div[@class="eventDate"]/div[@class="date"]/p[1]/text()' data=u'\n\t\t\t13-Sep-2014\n\t\t\t\t- 13-Sep-2014\n\t\t'>, <Selector xpath='//div[@class="eventDate"]/div[@class="date"]/p[1]/text()' data=u'\n\t\t\t05-Jul-2014\n\t\t'>, <Selector xpath='//div[@class="eventDate"]/div[@class="date"]/p[1]/text()' data=u'\n\t\t\t09-Aug-2014\n\t\t'>]

所以我正在使用这个REGEX,它完全适用于Rubular,Pythex和Pythonregex.com !!!!

(\d{2})-(\w{3})-(\d{4})(?:.*?-.*?(\d{2})-(\w{3})-(\d{4}))?

我注意到问题来自“。*”,没有考虑到“\ n”

所以我把它改成了:

(\d{2})-(\w{3})-(\d{4})(?:[\s\S]*?-[\s\S]*?(\d{2})-(\w{3})-(\d{4}))?`

哪个给出最终代码:

dates = response.xpath('//div[@class="eventDate"]/div[@class="date"]/p[1]/text()').re("(\d{2})-(\w{3})-(\d{4})(?:[\s\S]*?-[\s\S]*?(\d{2})-(\w{3})-(\d{4}))?")

我的问题: 我得到的下表不是我想要的:

[u'13', u'Sep', u'2014', u'13', u'Sep', u'2014', u'05', u'Jul', u'2014', u'', u'', u'', u'09', u'Aug', u'2014', u'', u'', u'']

Pb是在一个简单的表中..我需要它在一个双。它在Rubular,Pythex和Pythonregex上完美无缺!只是不在Scrapy ......

1 /请帮助!!!

我也有问题: 2 /如何在Scrapy中使点匹配换行符? 3 /我注意到默认情况下Scrapy中的正则表达式是非贪心的......这是真的吗?为什么?

1 个答案:

答案 0 :(得分:1)

请参阅此处http://regex101.com/r/lS5tT3/77

你的正则表达式工作正常。你需要设置s标记或re.DOTALL来捕获\n