Как вы получаете текст из HTML 'datacell', используя BeautifulSoup - PullRequest
6 голосов
/ 22 октября 2008

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

вот мой htm snip

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. Я научился программировать в эпоху Фортрана, и пока я наслаждаюсь изучением питона, я в восторге от его силы - пример BeautifulSoup. мне сложно сделать всю документацию.

Приветствия

Ответы [ 3 ]

5 голосов
/ 22 октября 2008

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

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

Более общее решение, которое не основывается на теге <b>, заключается в использовании аргумента text для 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'
3 голосов
/ 10 марта 2009
headerRows[0][10].contents[0].find('b').string
0 голосов
/ 22 октября 2008

У меня есть базовый класс, в который я расширяю все классы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...