Python BeautifulSoup只选择顶级标签

时间:2016-07-25 10:17:22

标签: python html beautifulsoup

我遇到一个问题,可能很容易,但我没有在文档上看到它。

这是目标html结构,非常简单。

<h3>Top 
    <em>Mid</em>
    <span>Down</span>
</h3> 

我想得到&#34; Top&#34;文本位于h3标记内,我写了这个

from bs4 import BeautifulSoup
html ="<h3>Top <em>Mid </em><span>Down</span></h3>"
soup = BeautifulSoup(html)
print soup.select("h3")[0].text

但它将返回Top Mid Down,我该如何修改它?

3 个答案:

答案 0 :(得分:1)

您可以使用查找设置 text = True recursive = False

In [2]: from bs4 import BeautifulSoup
   ...: html ="<h3>Top <em>Mid </em><span>Down</span></h3>"
   ...: soup = BeautifulSoup(html,"html.parser")
   ...: print(soup.find("h3").find(text=True,recursive=False))
   ...: 
Top 

根据格式,有许多不同的方式:

print(soup.find("h3").contents[0])
print(next(soup.find("h3").children))
print(soup.find("h3").next)

答案 1 :(得分:0)

尝试这样的事情:

from bs4 import BeautifulSoup
html ="<h3>Top <em>Mid </em><span>Down</span></h3>"
soup = BeautifulSoup(html)
print soup.select("h3").findChildren()[0]

虽然我不完全确定。也请检查一下 - How to find children of nodes using Beautiful Soup

基本上你需要寻找第一个childNode

答案 2 :(得分:-1)

您可以轻松使用正则表达式进行搜索 像这样的东西

 pageid=re.search('<h3>(.*?)</h3>', curPage, re.DOTALL)

使用pageid.group(value)方法

获取标记内的每个数据