[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Salvar posts de determinados usuários em fóruns
From: |
Cristiano |
Subject: |
Re: Salvar posts de determinados usuários em fóruns |
Date: |
Fri, 09 Jul 2010 18:17:24 -0000 |
User-agent: |
eGroups-EW/0.82 |
--- Em address@hidden, José Paulo de Oliveira Petry <petrybr@...> escreveu
>
> Senhores,
>
> Quero montar uma base de dados com os posts que determinados usuários
> fizeram em uma determinada thread de determinados fórums online.
>
> ***
> Resumindo minha dificuldade:
>
> Minha dificuldade: Separar as informações contidas entre duas tags
> específicas, ou seja:
>
> Pegar o arquivo HTML e separar os posts (ou seja, pegar o que tiver entre o
> <table> </table>)
> Pegar dentro de cada post a data e hora do mesmo ( ou seja, pegar o que
> tiver entre as tags <!-- status icon and date --> e <!-- / status icon and
> date --> )
> Pegar dentro de cada post a mensagem propriamente dita ( ou seja, pegar o
> que tiver entre as tags <!-- message --> e <!-- / message --> )
> ***
Petry, boa tarde. O dia está corrido e confesso que não li todo o seu post.
Parei onde você começa a contar a história.
Mas, se entendi pela parte cotada acima, a estrutura do seu arquivo é:
<table>
... talvez alguma coisa ...
<!-- status icon and date -->
... talvez outras coisas ...
<!-- message -->
... texto da sua mensagem ...
<!-- / message -->
... talvez mais outras coisas ...
<!-- / status icon and date -->
... talvez mais alguma coisa ...
</table>
Se for isso, para pegar tudo que existe entre 2 tags, sed é um bom caminho.
Vamos a um exemplo:
Considere a seguinte página da wikipedia:
http://tinyurl.com/2bk34lv
Suponha que eu salvei o código fonte dela no arquivo chamado
'ponto_fusao.html'. Veja este código fonte aqui:
http://pastebin.com/hKUUFJ63
Então, se eu quero só a tabela com os pontos de fusão de cada elemento, preciso
pegar tudo o que estiver dentro das tags <table> e </table>.
Basta usar o de endereços e intervalo do sed:
sed -n '/<table.*>/,/<\/table>/p' ponto_fusao.html
No exemplo acima, a opção -n suprime a saída automática, sendo exibido apenas o
que for explicitamente solicitado (comando p).
O sed pesquisa todas as linhas contidas no intervalo entre a primeira linha que
coincidir com o que estiver dentro do primeiro grupo delimitado pela /, ou seja
/<table.*>/, até a última linha que casar com o conteúdo do segundo grupo
delimitado pela /, ou seja, <\/table>.
Neste segundo grupo, a contrabarra (\) serve para 'escapar' a barra normal (/)
para que ela seja interpretada literalmente e não como o delimitador da
pesquisa.
Em seguida, o comando p imprimi todo o que estiver neste intervalo.
Você pode usar este conceito para fazer sua pesquisa e, se desejar delimitar
ainda mais, pegando apenas um 'sub-intervalo' dentro do seu intervalo, pode
usar o limitadores { e } para executar um segundo bloco de comandos apenas
dentro deste primeiro intervalo.
No seu caso, a pesquisa de um novo intervalo, dentro do intervalo localizado,
conforme exemplo abaixo, que retornaria apenas a linha da tabela que contém o
elemento 'Carbono':
sed -n '/<table.*>/,/<\/table>/{/Carbono/,/<\/tr>/p}' ponto_fusao.html
Se você testou o código acima, viu que a tag <tr> não foi listada, pois a
instrução pedia para iniciar o intervalo pela linha que contém 'carbono'.
Não é a solução para o seu problema, mas é um caminho. Dá para melhor muito
este código.
Na correia que está hoje, foi o que deu para arrumar.
Abraço
Cristiano