Estoy intentando extraer texto de páginas html arbitrarias. Algunas de las páginas (que no tengo control) tienen html malformados o scripts que dificultan esto. También estoy en un entorno de alojamiento compartido, así que puedo instalar cualquier lib de Python, pero no puedo instalar todo lo que quiero en el servidor.Estrategia de Python para extraer texto de páginas html con formato incorrecto
pyparsing y html2text.py tampoco parecían funcionar para páginas html malformadas.
Ejemplo URL es http://apnews.myway.com/article/20091015/D9BB7CGG1.html
Mi implementación actual es aproximadamente la siguiente:
# 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
si BeautifulSoup aún así no funciona, entonces recurrir al uso de una heurística de mirar la primera char, última Char (para ver si parece que es una línea de código # <, y tomar una muestra de la línea y luego verificar si los tokens son palabras o números en inglés. Si a pocos tokens son palabras o números, entonces supongo que el línea es código.
Podría utilizar el aprendizaje automático para inspeccionar cada línea, pero parece un poco caro y probablemente tendría que entrenarlo (ya que no sé mucho sobre máquinas de aprendizaje no supervisadas), y por supuesto escribirlo también.
Cualquier consejo, herramienta, estrategia sería bienvenido. También me doy cuenta de que la última parte de eso es bastante desordenada ya que si obtengo una línea que determine que contiene código, actualmente descarto toda la línea, incluso si hay una pequeña cantidad de texto en inglés real en la línea.
Bueno, no obstante, la noticia con la que se vinculó fue de gran lectura. Algunas personas, ¿eh? :) –
@Lesse, creo que también hay personas mal formadas. – Johnny4000