Я пытаюсь проанализировать XML с Beautifulsoup, но попал в кирпичную стену при попытке использовать атрибут " recursive " с findall ()
У меня довольно странный xmlформат, показанный ниже:
<?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>
Как видите, тег book повторяется внутри тега book, что вызывает ошибку, когда я пытаюсь что-то вроде:
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()
.увидим, что в моем супе. findAll я добавил recursive = false, что теоретически не даст рекурсировать найденный предмет, а перейдет к следующему.
Это не похоже на работу,так как я всегда получаю следующую ошибку:
File "catalog.py", line 17, in rss_parser
print item.title.string
AttributeError: 'NoneType' object has no attribute 'string'
Я уверен, что я делаю здесь что-то глупое, и был бы признателен, если бы кто-то мог помочь мне решить эту проблему.
Изменение структуры HTML не является вариантом, этот код должен хорошо работать, поскольку он потенциально может анализировать большой файл XML.