Como extrair termos de um documento HTML

2

Eu tenho um documento HTML com os termos que preciso colocar em uma planilha.

Eles seguem esse padrão básico:

<ul>
     <li class="name"><a href="spot.html">Spot</a></li>
     <li class="type">Dog</li>
     <li class="color">Red</li>
</ul>
<ul>
     <li class="name"><a href="mittens.html">Mittens</a></li>
     <li class="type">Cat</li>
     <li class="color">Brown</li>
</ul>
<ul>
     <li class="name"><a href="squakers.html">Squakers</a></li>
     <li class="type">Little Parrot</li>
     <li class="color">Rainbow</li>
</ul>

É muito consistente.

Eu preciso extrair a string dentro do li.name a (então, "Spot") mas somente se o type for "Dog" ou "Parrot", e colocá-los em uma planilha .

Eu tenho tentado usar a capacidade do Sublime Text para Encontrar com regex, mas estou com muita dificuldade, e como regex e HTML geralmente não jogam bem , eu queria saber se há uma maneira melhor e mais fácil de conseguir isso. Obrigado.

    
por bookcasey 21.06.2012 / 16:28

2 respostas

4

Aqui está uma implementação JavaScript que realmente usa o DOM, verifica a classe type e grava a classe name se a classe type contiver a palavra apropriada. Se mais type s forem necessários, basta adicioná-los à variável searchfor com um canal ( | ) separando-os.

var searchfor = /Dog|Parrot/gi;

var win = window.open();

var lists = document.body.getElementsByTagName("ul");

for (i in lists) {
    var points = lists[i].getElementsByTagName("li");

    for (j in points) {
        if ((" " + points[j].className + " ").indexOf(" " + "type" + " ") > -1) {
            if (points[j].innerHTML.match(searchfor) != null) {
                for (k in points) {
                    if ((" " + points[k].className + " ").indexOf(" " + "name" + " ") > -1) {
                        win.document.writeln(points[k].innerHTML + "<br />");

                        break;
                    }
                }
            }
        }
    }
}

Testado no jsFiddle: link

A maneira mais fácil de usá-lo é convertê-lo em um bookmarklet com algo assim: link

Como JavaScript, ele é independente do sistema operacional e suportado pelos navegadores da Web mais populares.

Para importar para uma planilha depende do seu aplicativo de planilha, mas muitas vezes copiar e colar é suficiente (uma nova janela é aberta com a saída).

Se fosse ID, não classe, isso teria sido um pouco mais fácil ... ah bem. Crédito para uma resposta Stack Overflow para obter o elemento por nome de classe.

    
por 21.06.2012 / 17:55
7

Não use o Regex para analisar XML ou HTML, use um analisador XML ou HTML.

Outra abordagem é converter XML ou HTML em texto e usar o grep

Veja Aplicativo para extrair tags XML de um documento
Veja Existe uma ferramenta nativa para analisar arquivos xml disponíveis no RedHat?
Veja Scripting: qual é a maneira mais fácil de extrair um valor em uma tag de um arquivo XML?

    
por 21.06.2012 / 16:33