2009-05-20 7 views
4

ich die Ergebnisse utidy zu Schöne Suppe übergeben wollen, ala:Schöne Suppe und uTidy

page = urllib2.urlopen(url) 
options = dict(output_xhtml=1,add_xml_decl=0,indent=1,tidy_mark=0) 
cleaned_html = tidy.parseString(page.read(), **options) 
soup = BeautifulSoup(cleaned_html) 

Wenn er gestartet wird, werden die folgenden Fehler auf:

Traceback (most recent call last): 
    File "soup.py", line 34, in <module> 
    soup = BeautifulSoup(cleaned_html) 
    File "/var/lib/python-support/python2.6/BeautifulSoup.py", line 1499, in __init__ 
    BeautifulStoneSoup.__init__(self, *args, **kwargs) 
    File "/var/lib/python-support/python2.6/BeautifulSoup.py", line 1230, in __init__ 
    self._feed(isHTML=isHTML) 
    File "/var/lib/python-support/python2.6/BeautifulSoup.py", line 1245, in _feed 
    smartQuotesTo=self.smartQuotesTo, isHTML=isHTML) 
    File "/var/lib/python-support/python2.6/BeautifulSoup.py", line 1751, in __init__ 
    self._detectEncoding(markup, isHTML) 
    File "/var/lib/python-support/python2.6/BeautifulSoup.py", line 1899, in _detectEncoding 
    xml_encoding_match = re.compile(xml_encoding_re).match(xml_data) 
TypeError: expected string or buffer 

Ich sammle utidy gibt ein XML-Dokument während BeautifulSoup eine Zeichenfolge möchte. Gibt es eine Möglichkeit, cleaned_html zu schreiben? Oder mache ich es falsch und sollte einen anderen Ansatz verfolgen?

Antwort

11

Wickeln Sie einfach str() um cleaned_html , wenn Sie es an BeautifulSoup übergeben.

2

Konvertieren Sie den an BeautifulSoup übergebenen Wert in eine Zeichenfolge. In Ihrem Fall führen Sie die folgende Bearbeitung bis zur letzten Zeile durch:

soup = BeautifulSoup(str(cleaned_html))