2008-10-21 12 views
6

Próbowałem odciąć niektóre dane z plików HTML. Mam kodowanie logiczne, aby uzyskać właściwe komórki. Teraz walczę, aby uzyskać rzeczywiste zawartości 'komórki':Jak uzyskać tekst z "datacell" HTML przy użyciu BeautifulSoup

tutaj jest mój htm wycinek

headerRows [0] [10] .contents

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

Należy pamiętać, że jest to lista element z Python [].

Potrzebuję wartości wyprodukowanych jabłek, ale nie mogę się do niej dostać.

Wszelkie sugestie będą mile widziane

sugestie na dobrą książką, która wyjaśnia to by zarobić Moją wieczną wdzięczność


Dziękuję za tę odpowiedź. Jednak nie ma bardziej ogólnej odpowiedzi. Co się stanie, jeśli moja komórka nie posiada atrybut pogrubienia

powiedzieć, że jest:

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

Jabłka Produkowane

Próbuję nauczyć się czytać/rozumieć dokumentację i swoje Odpowiedź pomoże

Naprawdę doceniam tę pomoc. Najlepszą rzeczą w tych odpowiedziach jest to, że łatwiej jest je uogólnić, a następnie udało mi się to zrobić z dokumentacji BeautifulSoup. Nauczyłem się programować w erze Fortranu, a ja czerpię przyjemność z uczenia się Pythona i jestem amzowany jego mocą - BeautifulSoup jest przykładem. tworzenie spójnej całości dokumentacji jest dla mnie trudne.

Cheers

Odpowiedz

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

BeautifulSoup documentation powinna obejmować wszystko, czego potrzeba - w tym przypadku wygląda na to, którego chcesz użyć findNext:

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

Bardziej ogólne rozwiązanie, które nie opiera się na znaczniku <b> będzie należy użyć argumentu do findAll, który umożliwia wyszukiwanie tylko obiektów 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

Mam klasę podstawową, że rozszerzam wszystkie klasy Pięknej Zupy o kilka metod, które pomagają mi uzyskać tekst w grupie elementów, które niekoniecznie chcę polegać na strukturze. Jedna z tych metod jest następująca:

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 
Powiązane problemy