web-dev-qa-db-fra.com

Extraire le contenu d'une balise avec BeautifulSoup

Je voudrais extraire le contenu Hello world. Veuillez noter qu'il existe plusieurs <table> et similaire <td colspan="2"> sur la page également:

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

J'ai essayé ce qui suit:

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

Mais cela n'a rien rapporté.

De plus, je rencontre également des problèmes avec l'extraction suivante de My home address:

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

<td>My home address</td>

J'utilise également la même méthode pour rechercher le text="Address: " mais comment naviguer vers la ligne suivante et extraire le contenu de <td>?

21
ready

L'opérateur contents fonctionne bien pour extraire text de <tag>text</tag>.


<td>My home address</td> exemple:

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> exemple:

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

utiliser ensuite à la place

>>> 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'

suivant et précédent vous permettent de vous déplacer dans les éléments du document dans l'ordre dans lequel ils ont été traités par l'analyseur tandis que les méthodes frère fonctionnent avec l'arbre d'analyse

15