Python正则表达式 - 获取时间和日期

时间:2014-02-06 11:16:17

标签: python html regex twitter web-crawler

我需要制作一个正则表达式来从文本中获取时间和日期。 我试过了:

re.compile("title=\".* js-short-timestamp")

我只需要得到类似的东西:

21:14 - 2 de out de 2013
15:13 - 1 de out de 2013
14:16 - 1 de out de 2013
15:58 - 14 de set de 2013
16:06 - 13 de set de 2013
14:59 - 13 de set de 2013
12:43 - 13 de set de 2013
09:33 - 13 de set de 2013

obs :(我用了一些re.sub来获取这些东西) 但有时我会得到:

18:30 - 11 de jul de 2011 href=https://twitter.com/XXXXXXXX/status/90533484464054272 
22:10 - 3 de jul de 2011 href=https://twitter.com/XXXXXXXXX/status/87689583726313472 

我的文字示例:

(阻止第一个带有数据原始标题是我的问题,因为我得到了href ..而且我不想要它。)

    <a data-original-title="16:06 - 17 de jun de 2013" href="https://twitter.com/XXXXXXXX/status/346705537934712832" class="tweet-timestamp js-permalink js-nav js-tooltip"><span class="_timestamp js-short-timestamp " data-time="1371496016" data-long-form="true">17 de jun</span></a>
</small>

   <a href="https://twitter.com/XXXXXXXX/status/407906654579998720" class="tweet-timestamp js-permalink js-nav js-tooltip" title="14:18 - 3 de dez de 2013">span class="_timestamp js-short-timestamp " data-time="1386087499" data-long-form="true">3 de dez</span></a>

2 个答案:

答案 0 :(得分:2)

您正在尝试使用正则表达式解析HTML,rarely ends well

我会使用HTML解析器。我建议您安装BeautifulSoup

from bs4 import BeautifulSoup

soup = BeatifulSoup(html_page_source)

timestamps = soup.find_all('a', class=_'tweet-timestamp', {'data-original-title': True})
for timestamp in timestamps:
    print timestamp['data-original-title']

这会找到包含({至少)类<a>tweet-timestamp属性的所有data-original-title标记,然后打印该属性。

答案 1 :(得分:0)

这应该是一个更好的正则表达式使用

time_re = re.compile(r'data-original-title="([^"]+).*js-short-timestamp')

然后你可以使用findall

time_re.findall(s) # where s is you html string

编辑:

做两个版本你需要一个更复杂的正则表达式

time_re = re.compile(r'data-original-title="([^"]+).*js-short-timestamp|tweet-timestamp.*title="([^"]+)"')

[filter(None, x)[0] for x in time_re.findall(s)] # where s is your html string