Domanda

Sto cercando di mettere insieme un raschietto HTML di base per una serie di siti web di riviste scientifiche, in particolare cercando di ottenere il paragrafo introduttivo astratto o.

La rivista corrente su cui sto lavorando è la Natura, e l'articolo ho usato il mio campione può essere visto all'indirizzo http://www.nature.com/nature/journal/v463/n7284/abs/nature08715.html .

Non riesco a ottenere il riassunto di quella pagina, tuttavia. Sto cercando tutto tra i tag <p class="lead">...</p>, ma io non riesco a capire come per isolarli. Ho pensato che sarebbe stato qualcosa di semplice come

from BeautifulSoup import BeautifulSoup
import re
import urllib2

address="http://www.nature.com/nature/journal/v463/n7284/full/nature08715.html"
html = urllib2.urlopen(address).read()
soup = BeautifulSoup(html)

abstract = soup.find('p', attrs={'class' : 'lead'})
print abstract

Utilizzando Python 2.5, BeautifulSoup 3.0.8, l'esecuzione di questo ritorna 'Nessuno'. Non ho possibilità di utilizzare qualsiasi altra cosa che deve essere compilato / installato (come lxml). È BeautifulSoup confuso, o sono io?

È stato utile?

Soluzione

che HTML è praticamente deforme, e xml.dom.minidom non può analizzare, e BeautifulSoup analisi non funziona bene.

Ho rimosso alcune parti <!-- ... --> e analizzo di nuovo con BeautifulSoup, allora la sua sembra migliore e in grado di eseguire soup.find('p', attrs={'class' : 'lead'})

Ecco il codice che ho provato

>>> html =re.sub(re.compile("<!--.*?-->",re.DOTALL),"",html)
>>>
>>> soup=BeautifulSoup(html)
>>>
>>> soup.find('p', attrs={'class' : 'lead'})
<p class="lead">The class of exotic Jupiter-mass planets that orb  .....

Altri suggerimenti

Ecco un modo non BS per ottenere l'astratto.

address="http://www.nature.com/nature/journal/v463/n7284/full/nature08715.html"
html = urllib2.urlopen(address).read()
for para in html.split("</p>"):
    if '<p class="lead">' in para:
        abstract=para.split('<p class="lead">')[1:][0]
        print ' '.join(abstract.split("\n"))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top