2011-09-29 19 views
10

Estoy tratando de recuperar los contenidos de la tabla desde una página web. Yo necesito el contenido pero no las etiquetas <tr></tr>. Ni siquiera necesito "tr" o "td" solo el contenido. por ejemplo:Eliminar etiquetas html en sed o similar

<td> I want only this </td> 
<tr> and also this </tr> 
<TABLE> only texts/numbers in between tags and not the tags. </TABLE> 

También me gustaría poner la primera salida de la columna como este en un nuevo archivo csv column1, info1, info2, info3 coumn2, info1, info2, info3

He intentado SED para borrar los patrones <tr><td> pero cuando busco la tabla también hay otras etiquetas como <color><span> etc. por lo que quiero eliminar todas las etiquetas; en resumen, todo con < y>.

+1

¿Qué tan regular es el contenido? Es posible que pueda usar ['lynx'] (http://lynx.browser.org/) para tomar la página y convertirla en texto y luego analizar el texto sin formato. Difícil de decir sin más detalles, raspado de pantalla tiende a ser una elección entre varios hacks feos. –

+0

bien esto resolvió el primer problema ** sed-e 's/<.*> // g' entrada **. y al comentario anterior, borré las páginas y solo raspé la parte de la mesa. por lo que el archivo contiene solo etiquetas y datos de tabla limpios. algo así como una rutina de tabla de tiempo de examen. – user913492

Respuesta

17

sed 's/<[^>]\+>//g' quitará todas las etiquetas, pero es posible que desee reemplazarlas por un espacio para que las etiquetas que están una junto a la otra no se ejecuten juntas: <td>one</td><td>two</td> convirtiéndose en: onetwo. Entonces podría hacer sed 's/<[^>]\+>/ /g' para que salga one two (bueno, en realidad one two).

Dicho eso, a menos que solo necesite el texto sin procesar, y parece que intenta realizar algunas transformaciones en los datos después de eliminar las etiquetas, un lenguaje de scripts como Perl podría ser una herramienta más adecuada para hacer esto.

Como mu es demasiado corto, mencionar raspar HTML puede ser un poco arriesgado, usar algo que en realidad analiza el HTML para usted sería la mejor manera de hacerlo. PHPs DOM API es bastante bueno para este tipo de cosas.

+0

gracias ... eso fue útil ... – user913492

2

Original:

Mac Terminal REGEX se comporta de una manera un tanto diferente. Yo era capaz de hacer esto en mi Mac mediante el siguiente ejemplo:

$ curl google.com | sed 's/<[^>]*>//g' 
% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 219 100 219 0  0 385  0 --:--:-- --:--:-- --:--:-- 385 

301 Moved 
301 Moved 
The document has moved 
here. 

$ bash --version 
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14) 
Copyright (C) 2007 Free Software Foundation, Inc. 

Editar:

sólo por el bien aclarar el original parecía:

$ curl googl.com 
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<TITLE>301 Moved</TITLE></HEAD><BODY> 
<H1>301 Moved</H1> 
The document has moved 
<A HREF="http://www.google.com/">here</A>. 
</BODY></HTML> 

también la cabecera rizo molesto puede haber deshacerse de usar la opción -s:

$ curl -s google.com | sed 's/<[^>]*>//g' 

301 Moved 
301 Moved 
The document has moved 
here. 

$ 
Cuestiones relacionadas