Como obter o texto de uma página usando o wget sem html?

17

Se eu tentar o wget em uma página da web, estou recebendo a página como html. É possível recuperar apenas o texto de um arquivo sem o html associado? (Isso é necessário para mim, pois algumas das páginas HTML contêm o programa c que está sendo baixado com tags html. Tenho que abri-lo no navegador e copiar manualmente o texto para criar um arquivo .c).

Cogumelos Lunares
fonte
1
Na verdade, é possível, mas você precisa escrever alguma função que analise o código da página e salve-o como .c. Não é difícil, mas depende da estrutura da página. Se você fornecer um link, pode haver alguém que o ajude com o código exato. Caso contrário, sedou perlsão seus amigos.
apressar

Respostas:

26

wgetrecuperará apenas o documento. Se o documento estiver em HTML, o que você deseja é o resultado da análise do documento.

Você poderia, por exemplo, usar lynx -dump -nolistse tiver lince por perto.

lynxé um navegador da Web leve e simples, que possui o -dumprecurso, usado para gerar o resultado do processo de análise. -nolistevita a lista de links no final, que aparecerá se a página tiver algum hiperlink.

Conforme mencionado pelo @Thor, também elinkspode ser usado para isso, pois também possui uma -dumpopção (e deve -no-referencesomitir a lista de links). Pode ser especialmente útil se você percorrer algum site usando -sigh- frames (MTFBWY).

Além disso, lembre-se de que, a menos que a página seja realmente apenas código C com tags HTML, você precisará verificar o resultado, apenas para garantir que não exista nada além de código C.

njsg
fonte
5

Se você não possui essas outras ferramentas instaladas, apenas o wget, e a página não tem formatação, apenas texto simples e links, por exemplo, código-fonte ou uma lista de arquivos, você pode remover o HTML usando o sed assim:

wget -qO- http://address/of/page/you/want/to/view/ | sed -e 's/<[^>]*>//g'

Isso usa o wget para despejar a fonte da página em STDOUT e sed para remover quaisquer pares <> e qualquer coisa entre eles.

Você pode redirecionar a saída do comando sed para o arquivo que deseja criar usando>:

wget -qO- http://.../ | sed -e 's/<[^>]*>//g' > downloaded_file.txt

NB: Você pode achar que há espaço em branco extra no arquivo que não deseja (por exemplo, as linhas são recuadas algumas colunas)

Pode ser mais fácil usar o editor de texto para organizar o arquivo (ou um formatador de fonte enquanto você baixa o código-fonte C).

Se você precisar fazer a mesma coisa simples em todas as linhas do arquivo, poderá incluir um comando para fazer isso no comando sed (aqui, removendo um espaço à esquerda):

wget -qO- http://.../ | sed -e 's/<[^>]*>//g;s/^ //g' > downloaded_stripped_file.txt
JohnGH
fonte
3

apenas para adicionar outra ferramenta. Eu prefiro w3m, que é lynxcomo um navegador de console. Você pode querer verificar o que já está disponível no seu sistema.

w3m -dump website.html
McPeppr
fonte