通过python将带有'th''st''rd''nd'的日期字符串转换为日期格式

Posted

技术标签:

【中文标题】通过python将带有\'th\'\'st\'\'rd\'\'nd\'的日期字符串转换为日期格式【英文标题】:Convert string of dates with 'th' 'st' 'rd' 'nd' into date format via python通过python将带有'th''st''rd''nd'的日期字符串转换为日期格式 【发布时间】:2016-10-19 08:45:13 【问题描述】:

我正在使用漂亮的汤来报废一个网站。这是CSS

<div id="listing-details-list">
<h3 class="listing-details-header">
Details:
<span>Posted on: 14th June 2016</span>
</h3>
</div>

我用来获取日期的代码是这样的

# date
    try:
        date=soup.find("h3","listing-details-header") 
        date_result= str(date.get_text().encode("utf-8").strip()[20:])
        print "\nPublished date: ", date_result
    except StandardError as e:
        date_result="Error was 0".format(e)
        print date_result

我得到的结果是一个日期作为字符串。一些样本是

23rd June 2016
21st July 2016
20th July 2016
3rd July 2016

现在,我希望日期是一个正确的日期,格式如下所示,以便我可以对其进行计算

23/6/2016
21/7/2016
20/7/2016
3/7/2016

在我的代码中获得所需日期的最佳方法是什么?

我希望以这种方式保存日期:

Month= 6
Day = 23
Year = 2016

我尝试了标记为最佳答案的解决方案,它有效

try:
        date=soup.find("h3","listing-details-header") 
        date_result= str(date.get_text().encode("utf-8").strip()[20:])
        date_result=parse(date_result) #added
        month = date_result.month
        day = date_result.day
        year = date_result.year
        print month
        print day
        print year

        print "\nPublished date: ", date_result
    except StandardError as e:
        date_result="Error was 0".format(e)
        print date_result

【问题讨论】:

“我尝试了标记为最佳答案的解决方案并且它有效” - 并且您将其标记为“已接受”,因此每个人都清楚特定的解决方案对您有用。无需在您的帖子中重复答案。如果您认为您自己的答案与提供的答案有很大不同,您可以随时将其添加为作为单独的答案 谢谢。我会记下来的。我是新来的 【参考方案1】:

要解析日期,我会让dateutil parser 完成这项工作:

>>> from dateutil.parser import parse
>>> l = ["23rd June 2016", "21st July 2016", "20th July 2016", "3rd July 2016"]
>>> for item in l:
...     parse(item)
... 
datetime.datetime(2016, 6, 23, 0, 0)
datetime.datetime(2016, 7, 21, 0, 0)
datetime.datetime(2016, 7, 20, 0, 0)
datetime.datetime(2016, 7, 3, 0, 0)

您将获得 datetime 实例,您可以使用这些实例来执行与日期或时间相关的计算。

我还会改进您在页面上定位所需元素并提取日期的方式:

from dateutil.parser import parse
from bs4 import BeautifulSoup

data = """
<div id="listing-details-list">
<h3 class="listing-details-header">
Details:
<span>Posted on: 14th June 2016</span>
</h3>
</div>"""

soup = BeautifulSoup(data, "html.parser")

for item in soup.find_all("span", text=lambda text: text and text.startswith("Posted on:")):
    date_string = item.get_text().split(": ")[-1]
    print(parse(date_string))

【讨论】:

谢谢。我安装了模块,它工作得很好。我实际上需要将日期、月份和年份保存在单独的变量日、月、年中。可能吗? @Joanne 当然,您可以访问日期时间对象的.day.month.year 属性。 试过了。请检查我编辑的答案。有错误。好像没有定义日期时间? @Joanne month= datetime.month(date_result) 应该是 month = date_result.month,这就是 alecxe 所说的。

以上是关于通过python将带有'th''st''rd''nd'的日期字符串转换为日期格式的主要内容,如果未能解决你的问题,请参考以下文章

提取以“st”、“nd”、“rd”、“th”结尾的日期,同时使用 RegEx 将日期与月份交换

python--以1-31的数字作为结尾的列表?论英文好的重要性!

Flutter:移动到上一个屏幕(2nd)并仅删除上一个屏幕(2nd 3rd 4th),而不是所有屏幕(1st 2nd 3rd 4th)

PHP 添加st,nd,rd,th到天:D

PHP st,nd,rd,th to Number

csharp 获取当前日期的后缀(st,nd,rd或th)