Python - BeautifulSoup - разбор HTML - PullRequest
       12

Python - BeautifulSoup - разбор HTML

1 голос
/ 24 марта 2011

Вот фрагмент кода сайта

<td class='vcard' id='results100212571'>   
 <h2 class="custom_seeMore">
  <a class="fn openPreview" href="link.html">Hotel Name<span class="seeMore">See More...</span></a>
 </h2> 
 <div class='clearer'></div> 
 <div class='adr'>
  <span class='postal-code'>00000</span> 
  <span class='locality'>City</span> 
  <span class='street-address'>Address</span>
 </div>
 <p class="tel">Phone number</p>

и я пытаюсь разобрать его

for element in BeautifulSoup(page).findAll('td'):
    if element.find('a', {'class' : 'fn openPreview'}):
        print element.find('a', {'class' : 'fn openPreview'}).string
    if element.find('span', {'class' : 'postal-code'}):
        print element.find('span', {'class' : 'postal-code'}).string
    if element.find('span', {'class' : 'locality'}):
        print element.find('span', {'class' : 'locality'}).string
    if element.find('span', {'class' : 'street-address'}):
        print element.find('span', {'class' : 'street-address'}).string
    if element.find('p', {'class' : 'tel'}):
        print element.find('p', {'class' : 'tel'}).string

Я знаю, что это очень любительский код, но он почти работает. т.е. он работает для всех классов, кроме 'fn openPreview', все другие классы отрисовывают свое содержимое, но

print element.find('a', {'class' : 'fn openPreview'}).string 

печать Нет

Пожалуйста, помогите мне, как разобрать это.

1 Ответ

8 голосов
/ 24 марта 2011

Согласно документации BeautifulSoup , element.string будет None, если element имеет несколько дочерних элементов.

В вашем случае

print element.find('a', {'class' : 'fn openPreview'}).contents[0].string

напечатает «Название отеля».

...