Как вы получаете текст из HTML-файла datacell с помощью BeautifulSoup

StackOverflow https://stackoverflow.com/questions/223328

Вопрос

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

вот мой htm-снип

Заголовки[0][10].содержание

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

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

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

Будем признательны за любые предложения

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


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

скажи, что это так:

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

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

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

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

Ваше здоровье

Это было полезно?

Решение

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

Другие советы

В Документация BeautifulSoup должно охватывать все, что вам нужно - в данном случае это выглядит так, как будто вы хотите использовать 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'

У меня есть базовый класс, который я расширяю на все классы 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top