2011-05-14 21 views
14

"Hello world" adlı içeriği ayıklamak istiyorum. Sayfada <table> ve benzeri <td colspan="2"> katları olduğunu lütfen unutmayın. Beautifulsoup = Bir etiketin içindeki içeriği çıkar

i aşağıdaki çalıştı:

hello = soup.find(text='Name: ') 
hello.findPreviousSiblings 

Ama hiçbir şey geri döndü. Aşağıdaki çıkarma "My ev adresi" ile

<table border="0" cellspacing="2" width="800"> 
<tr> 
<td colspan="2"><b>Name: </b>Hello world</td> 
</tr> 
<tr> 

Buna ek olarak, ben de yaşıyorum sorun:

<td><b>Address:</b></td> 

<td>My home address</td> 

Ben de kullanıyorum İşte

kod bloğu var = "Adres:" metnini aramak için aynı yöntem ancak sonraki satıra nasıl gidebilirim ve <td> içeriğini nasıl alabilirim? Bir sonraki

cevap

14

kullanımı yerine

>>> s = '<table border="0" cellspacing="2" width="800"><tr><td colspan="2"><b>Name: </b>Hello world</td></tr><tr>' 
>>> soup = BeautifulSoup(s) 
>>> hello = soup.find(text='Name: ') 
>>> hello.next 
u'Hello world' 

sonraki ve önceki kardeş yöntemleri ayrıştırma ağacının

+0

Hiçbir şey döndürür. hello = soup.find (text = 'Name:') hello.next – ready

+1

'Name:' belgedeki başka bir yerde görünüyor mu? –

+0

Üzgünüz, bu benim hatamdı. Şimdi çalışıyor. – ready

13

ile çalışırken onlar çözümleyici tarafından işlenmiştir sırayla belge öğeleri arasında hareket edelim contents operatörü text ürününü <tag>text</tag>'dan ayıklamak için iyi çalışıyor.


<td>My home address</td> örnek:

s = '<td>My home address</td>' 
soup = BeautifulSoup(s) 
td = soup.find('td') #<td>My home address</td> 
td.contents #My home address 

<td><b>Address:</b></td> örnek:

s = '<td><b>Address:</b></td>' 
soup = BeautifulSoup(s) 
td = soup.find('td').find('b') #<b>Address:</b> 
td.contents #Address: