嘿我一直试图从html页面中提取时间戳,并且我已经尝试过查看其他方法,但我似乎无法应用于我的案例。我试图接收许多消息的时间戳,但我无法从div中获取数据。
<div data-sigil="message-text" data-store='{"timestamp":1425541012960,"author":100004932254581,"uuid":"mid.1425541012942:e2ebd68467f39a6954"}' data-store-id="53666">
<span>
I'm a antibacterial
</span>
<div class="messageAttachments">
</div>
</div>
我使用的代码就是这个。
timestamp = []
soup = BeautifulSoup(open('Messenger.html', encoding='utf-8'), 'html.parser')
div = soup.div
timestamp.append = div.attrs['data-store']
print(timestamp)
如果有帮助,我还会尝试列出一些时间戳。
编辑:这是我收到的错误消息。
timestamp.append = div.attrs['data-store']
KeyError: 'data-store'
edit2:使用以下两个答案的组合,我得到了它,感谢所有帮助过的人:)
time = soup.find_all('div', {'data-sigil':'message-text'})
#print(len(time))
for i in range(len(time)):
stamp = ast.literal_eval(time[i].attrs['data-store'])['timestamp']
timestamp.append(stamp)
#print(timestamp[i])
答案 0 :(得分:1)
使用已经讨论过的内容here,您可以使用ast.literal_eval()
将字符串转换为实际字典。
以下代码的soup.div.attrs['data-store']
部分将从data-store
获取div
属性,ast.literal_eval()
会将字符串转换为实际字典并使用密钥{{然后我们获得相应的值。
['timestamp']
输出:
import ast
from bs4 import BeautifulSoup
timestamp = []
soup = BeautifulSoup(open('Messenger.html', encoding='utf-8'),
'html.parser')
stamp = ast.literal_eval(soup.div.attrs['data-store'])['timestamp']
timestamp.append(stamp)
print(timestamp)
答案 1 :(得分:0)
你很可能没有选择你想要的div标签;您可以使用属性来限制选择,例如使用data-store-id
与find
一起使用,您应该获得此div
标记,因为id
主要是唯一的:
soup.find('div', {'data-store-id': '53666'}).attrs['data-store']
# '{"timestamp":1425541012960,"author":100004932254581,"uuid":"mid.1425541012942:e2ebd68467f39a6954"}'
更新:
使用find_all
,您可以使用列表推导并测试div是否具有data-store
属性,如果有,则收集时间戳,如果没有,则将其过滤掉:
[div.attrs['data-store'] for div in soup.find_all('div') if div.has_attr('data-store')]
#['{"timestamp":1425541012960,"author":100004932254581,"uuid":"mid.1425541012942:e2ebd68467f39a6954"}']