Разделение HTML на группы с помощью BeautifulSoup, когда все группы находятся в одном элементе - PullRequest
1 голос
/ 26 июня 2010

Вот пример:

<p class='animal'>cats</p>
<p class='attribute'>they meow</p>
<p class='attribute'>they have fur</p>
<p class='animal'>turtles</p>
<p class='attribute'>they don't make noises</p>
<p class='attribute'>they have shells</p>

Если бы каждое животное было в отдельном элементе, я мог бы просто перебирать элементы.Это было бы прекрасно.Но веб-сайт, который я пытаюсь проанализировать, содержит всю информацию в одном элементе.

Что было бы лучшим способом разделить суп на разных животных или каким-то другим способом извлечь атрибуты и какое животное онипринадлежат?

(не стесняйтесь рекомендовать лучший заголовок)

Ответы [ 2 ]

2 голосов
/ 26 июня 2010

Если вам не нужно держать имена животных в порядке, вы можете упростить ответ Джейми следующим образом

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup("""
<p class='animal'>cats</p>
<p class='attribute'>they meow</p>
<p class='attribute'>they have fur</p>
<p class='animal'>turtles</p>
<p class='attribute'>they don't make noises</p>
<p class='attribute'>they have shells</p>
""")

attributes = {}

for p in soup.findAll('p'):
    if (p['class'] == 'animal'):
        animal = p.string
        attributes[animal] = []
    elif (p['class'] == 'attribute'):
        attributes[animal].append(p.string)

print attributes.keys()
print attributes
2 голосов
/ 26 июня 2010
from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup("""
<p class='animal'>cats</p>
<p class='attribute'>they meow</p>
<p class='attribute'>they have fur</p>
<p class='animal'>turtles</p>
<p class='attribute'>they don't make noises</p>
<p class='attribute'>they have shells</p>
""")

animals = []
attributes = {}

for p in soup.findAll('p'):
    if (p['class'] == 'animal'):
        animals.append(p.string)
    elif (p['class'] == 'attribute'):
        if animals[-1] not in attributes.keys():
            attributes[animals[-1]] = [p.string]
        else:
            attributes[animals[-1]].append(p.string)

print animals
print attributes

Это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...