2012-03-30 21 views
6

Sto cercando di analizzare l'elenco dei risultati di http://mobile.de.Analisi HTML con BeautifulSoup 4 e Python

Prima l'ho provato con la classe HTMLParser, ma ho ricevuto un errore: HTMLParser.HTMLParseError: EOF in middle of construct.

Così l'ho provato con BeautifulSoup 4, che è meglio per i siti Web non validi, ma il <div> che sto cercando non è accessibile, e non posso dire se è colpa mia o del sito web.

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 è la <div> con il risultato delle vetture. Ma sembra che non stia analizzando <form id="parkAndCompareVehicle" name="parkAndCompareVehicle" action="">. Non riesco a trovare la forma nell'oggetto zuppa.

Dov'è l'errore?

+1

Che cosa si ottiene se si tenta il seguente ciclo for, invece? - 'per il collegamento in soup.find_all (" form ", id =" parkAndCompareVehicle ")'? (Vedi http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The%20basic%20find%20method:%20findAll(name,%20attrs,%20recursive,%20text,%20limit,%20* * kwargs)) –

+0

Non ottengo nulla. Ho anche provato con find_all ("form") e ottengo solo gli altri 2. – user1010775

+0

hmm 'soup.find_all ('form', id = 'parkAndCompareVehicle')' restituisce il modulo per me – gorlum0

risposta

2

Dovrebbe essere qualcosa di simile:

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

attributi sono specificati in un dizionario - findAll(self, name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)

==========

upd. Spiacente, sembra che in bs4 si possa fare anche in questo modo.

Per quanto riguarda l'errore, il modulo che stai cercando non è nei risultati perché racchiude listEntries per quanto posso vedere.

Cosa c'è di sbagliato in questo:

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

Questa è la roba - vedi http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#The%20basic%20find%20method:%20findAll(name, % 20attrs,% 20recursive,% 20text,% 20limit,% 20 ** kwargs) –

+0

Sembra (findALL) che si intende BeautifulSoup3, ma iam utilizza la versione 4. Se uso find_all ('div', 'btn') ottengo il contenuto del btn-div. Non è colpa tua vedi [doku bs 4.0] (http://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all) – user1010775

+0

Come posso farlo funzionare allora? :/ – user1010775

Problemi correlati