2008-10-21 5 views
6

Я пытался вырезать некоторые данные из файлов HTML. У меня есть логическая кодировка, чтобы получить нужные ячейки. Теперь я изо всех сил, чтобы получить реальное содержимое ячейки '':Как вы получаете текст из HTML 'datacell' с помощью BeautifulSoup

вот мой HTM надрез

headerRows [0] [10] .contents

[<font size="+0"><font face="serif" size="1"><b>Apples Produced</b><font size="3">  
    </font></font></font>] 

Обратите внимание, что это список элемент из Python [].

Мне нужна ценность Яблоки, но не могу добраться до нее.

Любые предложения будут оценены

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


Спасибо за этот ответ. Однако, есть ли более общий ответ. Что произойдет, если ячейка не имеет смелое атрибут

говорят, что это:

[<font size="+0"><font face="serif" size="1"><I>Apples Produced</I><font size="3">  
    </font></font></font>] 

Яблоки Произведено

Я пытаюсь научиться читать/понимать документацию и ваши ответ поможет

Я очень ценю эту помощь. Самое лучшее в этих ответах состоит в том, что из них намного легче обобщить, тогда я смог сделать это из документации BeautifulSoup. Я научился программировать в эпоху Fortran, и я, пока мне нравится изучать питон, и я поражен его мощью - пример BeautifulSoup. сделать когернету всей документацией для меня непросто.

Приветствие

ответ

3
headerRows[0][10].contents[0].find('b').string 
5

BeautifulSoup documentation должен охватывать все, что вам нужно - в этом случае она выглядит, как вы хотите использовать findNext:

headerRows[0][10].findNext('b').string 

Более общее решение, которое не опирается на <b> теге будет использовать аргумент для findAll, что позволяет искать только для NavigableString объектов:

>>> s = BeautifulSoup(u'<p>Test 1 <span>More</span> Test 2</p>') 
>>> u''.join([s.string for s in s.findAll(text=True)]) 
u'Test 1 More Test 2' 
0

У меня есть базовый класс, который я расширяю все классы Beautiful Soup с помощью множества методов, которые помогают мне получить текст внутри группы элементов, которые я не обязательно хочу полагаться на структуру. Один из этих методов состоит в следующем:

def clean(self, val): 
    if type(val) is not StringType: val = str(val) 
    val = re.sub(r'<.*?>', '', s) #remove tags 
    val = re.sub("\s+" , " ", val) #collapse internal whitespace 
    return val.strip() #remove leading & trailing whitespace