Questo mi sta facendo impazzire, ho lottato per molte ore. Qualsiasi aiuto sarebbe molto apprezzato.Utilizzo di lxml per analizzare l'HTML con nome?
Sto usando PyQuery 1.2.9 (che è costruito sopra lxml
) per racimolare this URL. Voglio solo ottenere un elenco di tutti i collegamenti nella sezione .linkoutlist
.
Questa è la mia richiesta in piena:
response = requests.get('http://www.ncbi.nlm.nih.gov/pubmed/?term=The%20cost-effectiveness%20of%20mirtazapine%20versus%20paroxetine%20in%20treating%20people%20with%20depression%20in%20primary%20care')
doc = pq(response.content)
links = doc('#maincontent .linkoutlist a')
print links
Ma che restituisce un array vuoto. Se uso questa query invece:
links = doc('#maincontent .linkoutlist')
allora ottengo questo ritorno questo HTML:
<div xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude" class="linkoutlist">
<h4>Full Text Sources</h4>
<ul>
<li><a title="Full text at publisher's site" href="http://meta.wkhealth.com/pt/pt-core/template-journal/lwwgateway/media/landingpage.htm?issn=0268-1315&volume=19&issue=3&spage=125" ref="itool=Abstract&PrId=3159&uid=15107654&db=pubmed&log$=linkoutlink&nlmid=8609061" target="_blank">Lippincott Williams & Wilkins</a></li>
<li><a href="http://ovidsp.ovid.com/ovidweb.cgi?T=JS&PAGE=linkout&SEARCH=15107654.ui" ref="itool=Abstract&PrId=3682&uid=15107654&db=pubmed&log$=linkoutlink&nlmid=8609061" target="_blank">Ovid Technologies, Inc.</a></li>
</ul>
<h4>Other Literature Sources</h4>
...
</div>
Così i selettori genitore restituiscono HTML con un sacco di <a>
tags. Anche questo sembra essere un codice HTML valido.
Altri esperimenti rivelano che lxml non apprezza l'attributo xmlns
sul div di apertura, per qualche motivo.
Come posso ignorarlo in lxml e analizzarlo come un normale HTML?
UPDATE: Cercando ns_clean
, non riuscendo ancora:
parser = etree.XMLParser(ns_clean=True)
tree = etree.parse(StringIO(response.content), parser)
sel = CSSSelector('#maincontent .rprt_all a')
print sel(tree)
T Matassa così tanto. Interessato, puoi dirmi perché stavo vedendo questo spazio dei nomi collegato all'elemento 'div'? Non è lì nella fonte della pagina. – Richard
@Richard ottima domanda che mi ha fatto pensare che gli spazi dei nomi sono stati inseriti da pyquery dal momento che ha cercato di analizzare il contenuto con parser xml, mentre necessario per farlo tramite parser html, si prega di consultare l'aggiornamento. Spero possa aiutare. – alecxe
@alexce aha! grazie per la spiegazione. – Richard