2017-02-22 4 views
0

У меня есть следующий HTML повторяется несколько раз на странице (пожалуйста, не судите):Python: Извлечение разделенным текста из HTML с BeautifulSoup

<div class="container"> 
    <div class="image"> 
     <a href="#" title="#" class="#"> 
     <img src="img.jpg" alt="#" class="#"> 
     </a> 
    </div> 
    <div class="text"> 
     <a href="#"> 
      <h4 class="h4-class">{TITLE}</h4> 
     {SOME TEXT 1}<br /> 
     <h5><img src="img.jpg" alt="#" /> {SOME TEXT 2}</h5> 
     {SOME TEXT 3}  </a> 
    </div> 
    </div> 

Я хотел бы извлечь {TITLE}, {SOME TEXT 1}, {SOME TEXT 2} и {SOME TEXT 3}

Мой код выглядит следующим образом:

from BeautifulSoup import BeautifulSoup as bs 
import urllib2 
html = urllib2.urlopen('text') 
soup = bs(html) 
divs = soup.findAll("div", { "class" : "text" }) 

for div in divs: 
    inner_text = div.text 
    strings = inner_text.split("\n") 
    print strings[0] ## I want this to print just {TITLE} 

На печать его, она печатает одну линию, соединяющую все т он оценивает, например.

{TITLE}{SOME TEXT 1}{SOME TEXT 2}{SOME TEXT 3}

Есть в любом случае вокруг этого? Что я пропустил?

+0

Я не вижу 'list_txt' в данном HTML-коде. – arsho

+0

Typo при добавлении его здесь. Проблема все еще остается. – pee2pee

ответ

1

Вы можете prettify (see documentation here) содержимого div сначала, а затем манипулировать каждой строкой по мере необходимости. Это будет работать, если divs с именем класса text имеют одинаковую структуру.

код (Python 2):

from BeautifulSoup import BeautifulSoup as bs 

html = ''' 
<div class="container"> 
    <div class="image"> 
     <a href="#" title="#" class="#"> 
     <img src="img.jpg" alt="#" class="#"> 
     </a> 
    </div> 
    <div class="text"> 
     <a href="#"> 
      <h4 class="h4-class">{TITLE}</h4> 
     {SOME TEXT 1}<br /> 
     <h5><img src="img.jpg" alt="#" /> {SOME TEXT 2}</h5> 
     {SOME TEXT 3}  </a> 
    </div> 
    </div> 
''' 
soup = bs(html) 
divs = soup.findAll("div",{"class":"text"}) 
for div in divs: 
    pretty_div = div.prettify() 
    content_list = pretty_div.split("\n") 
    content_list = [s.strip() for s in content_list] 
    print content_list[3] 
    print content_list[5] 
    print content_list[9] 
    print content_list[11] 

Выход:

{TITLE} 
{SOME TEXT 1} 
{SOME TEXT 2} 
{SOME TEXT 3} 
+0

Предположим, я хотел извлечь HREF, как бы я пошел в этом сценарии? – pee2pee

+0

Вы хотите извлечь только атрибут атрибута 'href' ссылок внутри div класса' text'? – arsho

+0

Да ... ну, в дополнение к тому, что вы уже захватили – pee2pee

Смежные вопросы