Como remover o javascript dos arquivos html e deixar o texto simples

0

Estou tentando adaptar o script a seguir para obter entrada de um arquivo de texto no meu computador "input.txt" e enviar o resultado para um arquivo de texto "output.txt".

O script funciona bem ao pegar o html da internet, mas não consigo entender a adaptação de que preciso.

O mais estranho é que eu descobri há um ano - mas não me lembro o que fiz - não sou programador.

Código:

url='http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags'
curl -s  "$url"   |
sed -Ene:n -etD   \
    -e's/ ?[^ "]*"[^"]*"//g;/"/'bN  \
    -e's/[[:space:]]*($|<)/\n/'   \
    -e'/^Moderator.s Note/q'        \
    -e'/.\n/P;/\n</!t'        -e:D  \
    -e'/\n/D;/^<script>/!s/>/&\n/'  \
    -e'/\n/!s/<\/script>/\n/' -e:N  \
    -e'/\n/!{N;s///;}' -e//tD -etn
    
por speld_rwong 14.12.2016 / 07:41

1 resposta

2

How to remove javascript from html files and leaving plain text?

É uma pergunta interessante, pois eu acho que destaca outro problema com o uso do regex para análise de marcação, manutenção.

Se você tiver o php disponível em seu sistema, este script fará isso

#!/usr/local/bin/php
# point the #! to wherever your PHP commandline binary is

<?php

error_reporting(1);

$html = file_get_contents('http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags');

// create an object representing the DOM tree of the webpage
$document = new DOMDocument;
$document->loadHTML($html);

// store the <script> elements as a DOMN
$script_nodes = $document->getElementsByTagName('script');

// For some reason you can't use the DOMNode::removeChild method
// when iterating through an instance of PHP's DOMNodeList
// so use an array to queue the values in. see
// http://php.net/manual/en/domnode.removechild.php
$scripts_to_remove = [];
for ( $i=0; $i < $script_nodes->length; $i++ ) {
    $scripts_to_remove[] = $script_nodes->item($i);
}

// now we can iterate through the <script> nodes removing them
foreach ( $scripts_to_remove  as $s_node ) {
    $parent = $s_node->parentNode;
    $parent->removeChild($s_node);
}

// print out the new DOM as HTML
echo $document->saveHTML();

Uso

Para usar o script, configure um arquivo contendo o código acima, torne-o executável, execute-o e redirecione a saída para um arquivo, o arquivo deve conter o HTML removido das tags <script> .

    
por 14.12.2016 / 11:41