2015-04-08 4 views
0

Я следующий XML часть:новичку питон beautifulSoap экстракт articlebody из NewsArticle

<section class="article-body"> 
     <!-- <EdIndex> --> 
     <div class="squared-inline-picture-offset no-mobile"> 
      <picture class="lazy square pull-left"> 
      <img height="" width="" alt="" src="" class="loaded"> 
      <noscript><img src="" width="" height="" alt="" /></noscript> 
      </picture> 
     </div>  
     <p>bla1 bla1 bla1</p> 
     <p>bla2 bla2 bla2</p> 
     <p>bla3 bla3 bla3</p> 
     <!-- </EdIndex> --> 
     <div class="adv no-mobile"> 
     </div> 
    </section> 

и мне нужно, чтобы извлечь «бла-бла-бла» часть. Я попытался с

soup = BeautifulSoup(data) 
    [...] 
soup.findAll('section',{"class" : "article-body"}) 

с плохими результатами :(

любой намек? Существуют ли какие-либо способ быстро получить статью тело от http://schema.org/NewsArticle с помощью питона и BeautifulSoap?

Заранее спасибо

+1

Можете выложить на "* плохие результаты *"? –

ответ

0

Когда вы говорите («раздел», {«class»: «article-body»}), вы просите класс articale-body. Это означает, что он собирается дать вам хорошо ... все обратно ....

Что вы хотите сделать, это указать в нем элементы. В этом случае вы можете перейти к 'p' вот так.

>>> soup = BeautifulSoup(data) 
>>> p = soup.findAll('p') 
>>> print(p) 
[<p>bla1 bla1 bla1</p>, <p>bla2 bla2 bla2</p>, <p>bla3 bla3 bla3</p>] 
>>> print(p[1].text) 
bla2 bla2 bla2 

Примечание: вы можете использовать только .text, когда оно находится в элементе списка, а не в списке.

Видишь ли, он обнаруживает, что все p-элементы дают список всех найденных элементов. Это позволит выбрать все элементы р, так что если я хотел, чтобы выбрать конкретно это вы могли бы сделать что-то вроде:

soup = BeautifulSoup(data) 
result = soup.find('section', {'class': 'article-body'}) 
results = result.findAll('p') 
for p in results: 
    print(p, p.text) 

Выход:

<p>bla1 bla1 bla1</p> bla1 bla1 bla1 
<p>bla2 bla2 bla2</p> bla2 bla2 bla2 
<p>bla3 bla3 bla3</p> bla3 bla3 bla3 

Так, чтобы получить необработанный текст элементов с заголовками что вы хотите снова. Просто помните, что все, что вам дает список, находят, дает вам первый элемент, на который он падает.

Редактировать: исправлены ошибки копирования.