Sto cercando di estrarre testo da pagine html arbitrarie. Alcune pagine (di cui non ho alcun controllo) hanno html o script malformati che rendono questo difficile. Inoltre sono su un ambiente di hosting condiviso, quindi posso installare qualsiasi lib python, ma non posso installare solo quello che voglio sul server.Strategia di Python per l'estrazione di testo da pagine html malformate
pyparsing e html2text.py inoltre non sembrano funzionare per pagine html non formattate.
Esempio URL è http://apnews.myway.com/article/20091015/D9BB7CGG1.html
mio attuale implementazione è di circa il seguente:
# Try using BeautifulSoup 3.0.7a
soup = BeautifulSoup.BeautifulSoup(s)
comments = soup.findAll(text=lambda text:isinstance(text,Comment))
[comment.extract() for comment in comments]
c=soup.findAll('script')
for i in c:
i.extract()
body = bsoup.body(text=True)
text = ''.join(body)
# if BeautifulSoup can't handle it,
# alter html by trying to find 1st instance of "<body" and replace everything prior to that, with "<html><head></head>"
# try beautifulsoup again with new html
se BeautifulSoup ancora non funziona, allora mi ricorrere all'utilizzo di un'euristica di guardare il 1 ° car, ultimo char (per vedere se assomiglia ad una linea di codice # < e prendere un campione della linea e poi controllare se i token sono parole o numeri in inglese.Se a pochi dei token sono parole o numeri, allora suppongo che il la linea è codice
Potrei usare l'apprendimento automatico per ispezionare ogni linea, ma mi sembra un po 'costoso e probabilmente dovrei addestrarlo (dato che non ne so molto sulle macchine di apprendimento senza supervisione), e ovviamente lo scrivo anche io.
Qualsiasi consiglio, strumento, strategia sarebbe il benvenuto. Inoltre, mi rendo conto che l'ultima parte di questo è piuttosto caotica poiché se ottengo una riga che è determinata a contenere il codice, attualmente butto via l'intera riga, anche se c'è una piccola quantità di testo inglese nella riga.
Bene, la soluzione non ha resistito, la cronaca di notizie a cui si collegava era di grande lettura. Alcune persone, eh? :) –
@Lesse, immagino ci siano anche persone malformate. – Johnny4000