在Python中使用BeautifulSoup,如何找到元素结束标记之后的文本?

时间:2016-01-03 21:34:30

标签: python parsing beautifulsoup

我试图从Steam的商店页面中提取游戏的发布日期。我正在使用的html如下:

<div class="details_block">
  <b>Title:</b> Total War™: ROME II - Emperor Edition<br>
  <b>Genre:</b> <a href="http://store.steampowered.com/genre/Strategy/?snr=1_5_9__408">Strategy</a><br>
  <b>Developer:</b>
  <a href="http://store.steampowered.com/search/?developer=Creative%20Assembly&snr=1_5_9__408">Creative Assembly</a>
  <br>
  <b>Publisher:</b>
  <a href="http://store.steampowered.com/search/?publisher=SEGA">SEGA</a>       <br>
  <b>Release Date:</b> Sep 2, 2013<br>
</div>

最终,我的目标是从这个“details_block”div中检索许多值。我尝试用以下代码从这段代码中提取所有br标签:

details_block = bsObj.find("div", class_="details_block")

                for br in details_block.findAll('br'):
                    br.extract()

然后我逐个访问我想要的每个数据。我虽然在发布日期有点卡住了。我试图用find_next_sibling()来访问它,但是没有找到任何东西,大概是因为find_next_sibling只抓取带有标签的元素:

releaseDatePattern = re.compile(r'Release Date:')
                print details_block.find('b', text=releaseDatePattern).find_next_sibling().text.strip()

然而,在我提取所有br标签之前,它找到了值,但它附加了一个br标签,我不想要它。

是否有一种有效的方法来获取发布日期而不假设detail_block中这些详细信息的顺序将保持在此顺序中?

1 个答案:

答案 0 :(得分:2)

首先找到块中的所有b标记。然后迭代每个b标记,您应该将文本设为b.next_sibling