【问题标题】:Parsing Content With Beautiful Soup Between Two Closing Tags在两个结束标签之间用漂亮的汤解析内容
【发布时间】:2011-11-19 20:00:02
【问题描述】:

我正在使用 BeautifulSoup 来解析包含艺术家和专辑信息的网页内容。我已将信息解析为:

`<span dir="ltr"><a href="unique?id=1234">Jay-Z</a> &amp; <a href="unique?id" = 321">Kanye West</a> - Watch the Throne</span>`

专辑名称(在本例中为“Watch the Throne”)始终位于结束 &lt;/span&gt; 标记之前。

无论专辑中包含多少艺术家,无论是单个艺术家还是 30 位艺术家,我都需要从整个 &lt;span&gt; 元素中解析出专辑数据。

难点在于专辑名在两个结束标签元素之间。

有什么想法吗?

【问题讨论】:

    标签: python html parsing beautifulsoup


    【解决方案1】:
    >>> from BeautifulSoup import BeautifulSoup
    >>> html = '''<span dir="ltr"><a href="unique?id=1234">Jay-Z</a> &amp; 
    ... <a href="unique?id" = 321">Kanye West</a> - Watch the Throne</span>'''
    >>> soup = BeautifulSoup(html)
    >>> soup.span.contents[-1].strip('- ')
    u'Watch the Throne'
    

    【讨论】:

    • 这绝对是这样做的方法。非常感谢。 BeautifulSoup 是一个了不起的工具。它几乎太简单了。我只是让我的方法过于复杂。
    【解决方案2】:

    如果我理解正确,专辑名称将始终位于 span 元素的末尾。您可以尝试查找 a-tag 结束的最后一个索引,以及 span-tag 结束的最后一个索引,并从中构建一个包含专辑信息的字符串。

    因此,使用theString.rfind("&lt;/a&gt;") 可以找到起始索引,使用theString.rfind("&lt;/span&gt;") 可以找到结束索引。

    【讨论】:

    • 这正是我需要的信息。我对 python 还很陌生,所以专注于让 BeautifulSoup 完成我忘记了能够在字符串中找到范围的脏活。谢谢!
    • 但你并不真正需要这个 - 你可以使用本机 BeautifulSoup 来解决这个问题 - 我相信会更短更优雅
    • 是的,你是对的。 BeautifulSoup 可以迅速做到这一点。你下面的一个人马上和我一起清理了它。谢谢!
    【解决方案3】:

    如果 s 是汤元素,则:

    album = s.findAll('a')[-1].nextSibling
    

    我猜你可以自己清理“ - ” 祝你好运,我喜欢美丽的汤

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2019-11-10
      • 2013-03-21
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多