使用Beautiful Soup - Python提取嵌套在几个标签中的文本

时间:2015-03-31 18:06:01

标签: python beautifulsoup

我想提取文字" 12:25 AM - 2015年3月30日"从下面的HTML中的美丽汤。这是html在被BS处理后的样子:

<span class="u-floatLeft"> · </span>
<span class="u-floatLeft">
<a class="ProfileTweet-timestamp js-permalink js-nav js-tooltip" href="/TBantl/status/582333634931126272" title="5:08 PM - 29 Mar 2015">
<span class="js-short-timestamp " data-aria-label-part="last" data-long-form="true" data-time="1427674132">
Mar 29
  </span>

我有这段代码,但它不起作用:

date = soup.find("a",attrs={"class":"ProfileTweet-timestamp js-permalink js-nav js-tooltip"})["title"]

1 个答案:

答案 0 :(得分:1)

这对我有用:

from bs4 import BeautifulSoup

html = """<span class="u-floatLeft">&nbsp;·&nbsp;</span>
          <span class="u-floatLeft">
          <a class="ProfileTweet-timestamp js-permalink js-nav js-tooltip" href="/indoz1/status/582443448927543296" title="12:25 AM - 30 Mar 2015">
          <span class="js-short-timestamp " data-aria-label-part="last" data-time="1427700314" data-long-form="true">
       """
soup = BeautifulSoup(html)
date = soup.find("a", attrs={"class": "ProfileTweet-timestamp js-permalink js-nav js-tooltip"})["title"]

>>> print(date)
'12:25 AM - 30 Mar 2015'

如果没有更多信息,我怀疑您没有将HTML代码段转换为BeautifulSoup对象。在这种情况下,您将获得TypeError: find() takes no keyword arguments

或者,在上面的评论中,作为alexce points out,您正在寻找的项目实际上可能不会出现在您要解析的HTML中。在这种情况下,date将为空。


最后,与您上面遇到的问题完全无关 - 如果您要将date解析为datetime对象,则可以采用更简单的方法。只需抓取"data-time"中的<span class="js-short-timestamp " ... >字段,然后使用datetime.datetime.fromtimestamp进行解析:

from datetime import datetime as dt

# get "data-time" field value as string named timestamp
data_time = dt.fromtimestamp(int(timestamp))

>>> print(data_time)
datetime.datetime(2015, 3, 30, 3, 25, 14)