我正在努力寻找并将日期中的文本转换为系统日期,并将其作为变量用于其他地方。我正在寻找标签<span>
中“标题”背后的日期。
我尝试了几种方法,但并没有真正提出一个简单的解决方案。最后我用了
modif_time = soup.find(text=re.compile('title'))
以下是HTML代码,其中包含信息。
<a class="browser-fle yjax-lik" href="/mendonhall/mendonhall_adm/files/e0e854aaf54cb711f7335c8d8ecac9766cd175e3/tak/P0328_dummy.docx">P0328_dummy.docx</a>
</td>
<td>
20.7 KiB
</td>
<td>
application/vnd.openxmlformats-officedocument.wordprocessingml.document
</td>
<td>
<div class="tool" title="tak directory">
<pre>r28ee854af54c</pre>
</div>
</td>
<td>
<span class="tool" title="Fri, 19 Dec 2014 09:38:49">
12 minutes and 48 seconds ago</span>
</td>
<td>
<span title="id">
xn06611 (Jeff Mendonhall)
</span>
</td>
</tr>
答案 0 :(得分:3)
你想要
soup.find("span" title=True, class_='tool')
获取span
代码的title
属性的值。 title=True
将结果限制为包含title
属性的标记,class_='tool'
进一步将结果限制为class
属性值为'tool'
的标记( class_
中的下划线避免了与Python保留字的冲突。
您可以使用
将其转换为日期时间对象import datetime
dt = datetime.strptime(soup.find("span" title=True, class_='tool')["title"], "%a, %d %b %Y %H:%M:%S")
答案 1 :(得分:1)
soup.find_all('span')
查找HTML中的所有span标记。您可以通过指定关键字参数来further filter结果。
import email.utils as EU
soup.find_all('span', title=EU.parsedate)
找到所有具有标题属性的span标记EU.parsedate
返回Truish值。
In [112]: EU.parsedate('Fri, 19 Dec 2014 09:38:49')
Out[112]: (2014, 12, 19, 9, 38, 49, 0, 1, -1)
当EU.parsedate无法解析标题时,它返回None(Falsish值)。
因此,soup.find_all('span', title=EU.parsedate)
只查找标题属性看起来像日期的span标记。
然后,您可以使用datetime.datetime(*timetuple[:6])
将EU.parsedate返回的时间元组转换为datetime.datetime。
import bs4 as bs
import datetime as DT
import email.utils as EU
soup = bs.BeautifulSoup(open('data'))
spans = soup.find_all('span', title=EU.parsedate)
for span in spans:
print(span.attrs['title'])
# Fri, 19 Dec 2014 09:38:49
timetuple = EU.parsedate(span.attrs['title'])
date = DT.datetime(*timetuple[:6])
print(date)
# 2014-12-19 09:38:49
答案 2 :(得分:0)
from datetime import datetime
...
span = soup.find('span')
title = span['title']
print datetime.strptime(title, '%a, %d %b %Y %H:%M:%S')
输出:
2014-12-19 09:38:49
答案 3 :(得分:0)
您将在下面找到如何获取所有span元素,并仅保留日期为“title”的元素。
import time
import requests
from bs4 import BeautifulSoup
html = requests.get(url).content # url you're interested in
soup = BeautifulSoup(html)
def is_date(x):
try:
time.strptime(x, "%a, %d %b %Y %H:%M:%S") # Try to transform string into
return True # a datetime object
except:
return False
print is_date("Fri, 19 Dec 2014 09:38:49") # it prints True
res = [s for s in soup.findAll('span', title=True) if is_date(s['title'])]
print res
这里印刷的是什么:
[<span class="tool" title="Fri, 19 Dec 2014 09:38:49">
12 minutes and 48 seconds ago</span>]