2012-03-30 15 views
6

Ich versuche, die Ergebnisliste von http://mobile.de analysieren.HTML-Parsing mit BeautifulSoup 4 und Python

Zuerst habe ich es mit der HTMLParser Klasse versucht, aber ich habe einen Fehler: HTMLParser.HTMLParseError: EOF in middle of construct.

Also habe ich es mit BeautifulSoup 4 versucht, die für nicht gültige Websites besser ist, aber die <div> Ich suche nicht zugänglich ist, und ich kann nicht sagen, ob es meine Schuld oder die Website ist.

from bs4 import BeautifulSoup 
    import urllib 
    import socket 

    searchurl = "http://suchen.mobile.de/auto/search.html?scopeId=C&isSearchRequest=true&sortOption.sortBy=price.consumerGrossEuro" 
    f = urllib.urlopen(searchurl) 
    html = f.read() 
    soup = BeautifulSoup(html) 

    for link in soup.find_all("div","listEntry "): 
     print link 

listEntry ist die <div> mit dem Ergebnis der Autos. Aber es scheint, dass er nicht analysiert <form id="parkAndCompareVehicle" name="parkAndCompareVehicle" action="">. Ich kann das Formular im Suppenobjekt nicht finden.

Wo ist der Fehler?

+1

Was bekommen Sie, wenn Sie die folgende for-Schleife stattdessen versuchen? - 'für den Link in soup.find_all (" form ", id =" parkAndCompareVehicle ")'? (Siehe http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The%20basic%20find%20method:%20findAll(name,%20attrs,%20recursive,%20text,%20limit,%20*) * kwargs)) –

+0

Ich bekomme nichts. Ich habe es auch mit find_all ("form") versucht und ich bekomme nur die 2 anderen. – user1010775

+0

hmm 'supp.find_all ('form', id = 'parkAndCompareVehicle')' gibt das Formular für mich zurück – gorlum0

Antwort

2

Es sollte so etwas wie sein:

for link in soup.findAll('div', {'class': 'listEntry '}): 
    print link 

Attribute werden angegeben in einem Wörterbuch - findAll(self, name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)

==========

upd. Tut mir leid, es scheint in bs4, dass du das auch machen kannst.

Wie für den Fehler, das Formular, das Sie suchen, ist nicht in den Ergebnissen, weil es listEntries so weit wie ich sehen kann.

Was ist falsch daran:

form = soup.find('form', id='parkAndCompareVehicle') 
print len(form.find_all('div', 'listEntry ')) 
+0

Das ist das Zeug - siehe http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The%20basic%20find%20method:%20findAll(name, % 20ttrs,% 20recursive,% 20text,% 20limit,% 20 ** kwargs) –

+0

Es sieht (findALL) aus, dass du BeautifulSoup3 meinst, aber ich benutze Version 4. Wenn ich find_all ('div', 'btn') benutze, bekomme ich der Inhalt des btn-div. Das ist nicht der Fehler. siehe [Doku bs 4.0] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all) – user1010775

+0

Wie kann ich das dann funktionieren? :/ – user1010775

Verwandte Themen