Python 特定数据的唯一属性

Python 特定数据的唯一属性,python,beautifulsoup,Python,Beautifulsoup,我正在尝试使用Beautiful soup解析最后一次发布日期,它表示3天(选定字符串)。到目前为止,我试过: lastPost = soup.find_all('dl', attrs={'dt': 'Last post', 'data-format': 'medium'}) 但是没有成功。页面中其他项目的所有其他标记和属性都相同。也 data-time="random digits" 不起作用,因为不同页面/不同用户中的同一项不同,这将在最近被解析。唯一重复和独特的是最后一篇文章。 检索

我正在尝试使用Beautiful soup解析最后一次发布日期,它表示3天(选定字符串)。到目前为止,我试过:

lastPost = soup.find_all('dl', attrs={'dt': 'Last post', 'data-format': 'medium'})
但是没有成功。页面中其他项目的所有其他标记和属性都相同。也

data-time="random digits" 
不起作用,因为不同页面/不同用户中的同一项不同,这将在最近被解析。唯一重复和独特的是最后一篇文章。 检索上次发布日期的确切指针是什么(截至发布日期为3天)

谢谢


您正在这里寻找一门
课程。我会用a来选择它:

soup.select('div.secondary dd span.relative-date')[0].string
如果您特别想查找
Last Post
元素并查找与之相关的日期,则需要首先单独搜索该元素:

import re

last_post = soup.find('dt', text=re.compile('Last Post'))
last_post.find_next_sibling('dd').span.string
请注意,
find_all()
过滤单个标记;
attrs={'dt':'Last post','data format':'medium'}
过滤器意味着:为我找到一个至少有两个属性的标记,
dt=“Last post”
data format=“medium”
;您正在查找的标记没有
dt
属性。这与它是一个
标记而不是
标记这一事实不同

总而言之,实际页面实际上并不包含HTML格式的消息。相反,它们是通过AJAX加载的;页面加载
http://try.discourse.org/user_actions.json?offset=0&username=discoursetestr1
,其中包含实际消息:

>>> import requests
>>> r = requests.get('http://try.discourse.org/user_actions.json?offset=0&username=discoursetestr1')
>>> r.json()['user_actions'][0]
{u'post_number': 4, u'target_name': u'discourse', u'excerpt': u'test........ \n\n \n\nlkjlkjlkljlkj', u'uploaded_avatar_id': 319, u'target_username': u'discoursetestR1', u'user_id': 4489, u'title': u'My custom own topic', u'moderator_action': False, u'acting_user_id': 4489, u'acting_name': u'E Mosbat', u'topic_id': 279, u'hidden': False, u'username': u'eMosbat', u'acting_uploaded_avatar_id': 319, u'deleted': False, u'acting_avatar_template': u'/user_avatar/try.discourse.org/emosbat/{size}/319.png', u'slug': u'my-custom-own-topic', u'avatar_template': u'/user_avatar/try.discourse.org/emosbat/{size}/319.png', u'name': u'E Mosbat', u'created_at': u'2014-05-27T13:25:49.988Z', u'target_user_id': 4481, u'action_type': 9, u'acting_username': u'eMosbat', u'category_id': 2}
 >>> r.json()['user_actions'][0]['created_at']
 u'2014-05-27T13:25:49.988Z'

页面JavaScript可能会根据该信息生成一个相对日期。

当突出显示
元素时,为什么要查找
元素?因为
最后一篇文章
没有
标记。这是最后一次发布日期所在的唯一唯一属性。
find_all()
选择单个标记的属性,而不是其他标记的属性。您能为我们提供原始HTML或指向该页面的链接吗?使用实际的HTML制作演示会容易得多。@MartijnPieters请查看更新的问题。好的,非常感谢您的澄清。我想知道还有哪一个scraper/解析器可以在那里完成这项工作?@ikechi:要么模拟一个成熟的浏览器(例如ghost.py或Selenium)并为您执行JavaScript,要么直接加载AJAX请求。