Próbuję do analizowania XML z BeautifulSoup, ale uderzył w mur, gdy próbuje użyć „recursive” atrybutu z findAll()BeautifulSoup zagnieżdżone znaczniki
I wykazały dość dziwne formacie xml poniżej:
<?xml version="1.0"?>
<catalog>
<book>
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
<book>true</book>
</book>
<book>
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
<book>false</book>
</book>
</catalog>
Jak widać, znacznik książka powtarza wewnątrz znacznika książka, która powoduje błąd, gdy próbuję coś jak:
from BeautifulSoup import BeautifulStoneSoup as BSS
catalog = "catalog.xml"
def open_rss():
f = open(catalog, 'r')
return f.read()
def rss_parser():
rss_contents = open_rss()
soup = BSS(rss_contents)
items = soup.findAll('book', recursive=False)
for item in items:
print item.title.string
rss_parser()
jak widać na moim soup.findAll Dodałem rekursywną = fałsz, która teoretycznie sprawiłaby, że nie powtórzyłaby się przez znaleziony przedmiot, ale przejdź do następnego.
nie wydają się działać, bo zawsze pojawia się następujący błąd:
File "catalog.py", line 17, in rss_parser
print item.title.string
AttributeError: 'NoneType' object has no attribute 'string'
Jestem pewien, że robię coś głupiego tutaj, i byłby wdzięczny, gdyby ktoś mógł mi dać jakąś pomoc na jak rozwiązać ten problem.
Zmiana struktury HTML nie jest opcją, ten kod musi działać dobrze, ponieważ może potencjalnie parsować duży plik XML.
. Błędów dzieci, a robienie tego przez "książkę" zwraca tylko pierwszy element –
Mój błąd, poprawiłem go, aby findChildren(). Ale ".findAll ("book") "działa dla mnie. Czy na pewno użyłeś findAll, nie znajdziesz? –
Moja zła, * I * skończyło się umieszczaniem niewłaściwego XML tutaj. Trochę zaktualizowałem jego strukturę, tak że reprezentuje dokładnie to, co mam, i powód, dla którego soup.findAll ("książka" nie działa dla mnie –