Frage

Ich habe eine durch Kommata getrennte Liste in einer Tabellenzelle in einem HTML-Dokument erhalten, aber einige Elemente in der Liste verknüpft sind:

<table>
  <tr>
    <td>Names</td>
    <td>Fred, John, Barry, <a href="http://www.example.com/">Roger</a>, James</td>
  </tr>
</table>

Ich habe schöne Suppe wurde mit dem HTML zu analysieren, und ich kann auf den Tisch bekommen, aber was ist der beste Weg, es zu spalten und eine Datenstruktur zurückkehrt grob wie:

[
  {'name':'Fred'},
  {'name':'John'},
  {'name':'Barry'},
  {'name':'Roger', 'url':'http://www.example.com/'},
  {'name':'James'},
]
War es hilfreich?

Lösung

Dies ist eine Möglichkeit, Sie könnte es tun:

import BeautifulSoup

soup = BeautifulSoup.BeautifulSoup('''<table>
  <tr>
    <td>Names</td>
    <td>Fred, John, Barry, <a href="http://www.example.com/">Roger</a>, James</td>
  </tr>
</table>''')

result = []
for tag in soup.table.findAll('td')[1]:
  if isinstance(tag, BeautifulSoup.NavigableString):
    for name in tag.string.split(','):
      name = name.strip()
      if name:
        result.append({ 'name': name })
  else:
    result.append({ 'name': tag.string.strip(), 'url': tag["href"] })

print result
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top