【问题标题】:How to extract info in the tag by looking for a tag inside of that tag?如何通过在标签内查找标签来提取标签中的信息?
【发布时间】:2018-03-14 02:50:59
【问题描述】:

假设我想提取每集 24 分钟的信息或评级下的 N13 信息。现在这只是代码的一部分,一些 span 标签不包含 dark_text 类,而是其他东西。但是当我寻找包含评级的标签时,当我找到它时,我无法提取它是什么评级,因为N13 现在在div 标签下,而不是span,但因为我正在寻找'评级”或“持续时间”我必须寻找“跨度”标签。而且 Beautiful Soup 不允许你做findAll('div').findAll('span', {'class':'...'}),所以如果它找到我正在寻找的span 标签,我就无法返回div 标签。

当我执行for 循环时,它会打印出所有这些额外的Nones 以及其他内容。 有人对如何很好地解析这个有任何提示吗?

问题实际上只是如何在<span> 标记中查找位于div 标记下的内容,但一旦找到然后提取整个div 标记,或者最好甚至是仅在div 中的内容标签但不在span 标签中?事实证明这比我预期的要复杂。

from bs4 import BeautifulSoup
x= '''<div>
<a href="javascript:void(0);" onclick="$('#score143583').toggle()">Overall Rating</a>:
    2
  </div>
  <div class="spaceit">
  <span class="dark_text">Duration:</span>
    24 min. per ep.
    </div>
  <div>
  <span class="dark_text">Rating:</span>
    N13
    </div>'''


bs = BeautifulSoup(x, 'html.parser')

【问题讨论】:

  • 您能否添加您的输出预期的样子?
  • 我正在寻找“N13”或“评级:N13”,持续时间相同:24 分钟,总体评级:2。不知道如何获得,但一个只是 div.text 另一个是 div.text 忽略 span.text

标签: python html parsing beautifulsoup tags


【解决方案1】:

您可以使用next_sibling 方法获取紧跟在span 标记之后的文本。要获取span 标签,您可以使用find('span', class_='dark_text', text='Duration:')

创建一个简单的函数,你可以使用这个:

def get_next_text(soup, text):
    return soup.find('span', class_='dark_text', text=text).next_sibling

soup = BeautifulSoup(html, 'lxml')
duration = get_next_text(soup, 'Duration:')
print('Duration:', duration.strip())
rating = get_next_text(soup, 'Rating:')
print('Rating:', rating.strip())

输出:

Duration: 24 min. per ep.
Rating: N13

如果你想获得包含你想要的文本的整个div标签,你可以使用.parent

def get_parent(soup, text):
    return soup.find('span', class_='dark_text', text=text).parent

soup = BeautifulSoup(html, 'lxml')
duration = get_parent(soup, 'Duration:')
print(duration)
rating = get_parent(soup, 'Rating:')
print(rating)

输出:

<div class="spaceit">
<span class="dark_text">Duration:</span>
    24 min. per ep.
</div>
<div>
<span class="dark_text">Rating:</span>
    N13
</div>

【讨论】:

  • 我想我可能得和下一个兄弟做点什么,谢谢,这很有帮助,我会试试看
猜你喜欢
  • 2019-09-01
  • 2013-11-08
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多