Как вы получаете текст из HTML-файла datacell с помощью BeautifulSoup
-
03-07-2019 - |
Вопрос
Я пытался удалить некоторые данные из 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