2012-12-28 19 views
14

Sto usando PyQuery e voglio stampare un elenco di collegamenti, ma non riesco a capire come ottenere l'attributo href da ciascun collegamento nella sintassi PyQuery.Ottenere gli attributi in PyQuery?

Questo è il mio codice:

e = pq(url=results_url) 
    links = e('li.moredetails a') 
    print len(links) 
    for link in links: 
    print link.attr('href') 

Questo stampa 10, poi dà il seguente errore:

AttributeError: 'HtmlElement' object has no attribute 'attr' 

Che cosa sto facendo di sbagliato?

risposta

23

PyQuery avvolge lxml, in modo da utilizzare la ElementTree API per accedere agli attributi:

e = pq(url=results_url) 
for link in e('li.moredetails a'): 
    print link.attrib['href'] 

In alternativa, per utilizzare l'API PyQuery su qualsiasi trovato elemento, racchiudere l'elemento in una chiamata pq(), facendo eco al modo in cui è necessario utilizzare jQuery $() o jQuery() per avvolgere elementi DOM:

print pq(link).attr('href') 

o

print pq(link).attr['href'] 

per un modo più divinatorio per accessess gli attributi.

Si potrebbe anche ciclo rispetto al metodo .items() invece, che restituisce elementi PyQuery invece:

e = pq(url=results_url) 
for link in e('li.moredetails a').items(): 
    print link.attr['href'] 
+0

Grazie mille. – Richard

+2

pq (link) .attr.href funziona anche – gawel

+0

Il metodo 'pq (...). Attr()' è documentato? Non lo vedo nel documento API: https://pythonhosted.org/pyquery/api.html –

2

Come in jQuery, involucro che puntano in alto:

e = pq(url=results_url) 
links = e('li.moredetails a') 
print len(links) 
for link in links: 
    print pq(link).attr('href') 
Problemi correlati