2016-07-25 2 views
1

У меня возникла проблема, это может быть очень легко, но я не видел его на документе.Python BeautifulSoup только выберите верхний тег

Вот целевая структура html, очень простая.

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

Я хочу, чтобы получить «Top» текст, который был внутри 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, как я могу изменить его?

ответ

1

Вы можете использовать найти установки текст = 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) 
+0

Спасибо, я проведу более подробную информацию о 'contents' и' children' –

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.

+0

Существует ошибка синтаксиса в коде, но спасибо за вашу информацию. –

-1

его легко можно найти с помощью регулярных выражений что-то вроде этого

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

и получить каждый из данных внутри тега, используя pageid.group(value) метод

+0

Спасибо, но я думал, что будет проще получить контент в BeautifulSoup. –