这里是上下文:我正在尝试在网站上检索几个日期,并将它们放入“加倍列表”中,如下所示:
[[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中的正则表达式是非贪心的......这是真的吗?为什么?