Listando certos conteúdos de um site no terminal

0

Este foi um dos 12 problemas no meu exame prático hoje. Para a primeira parte da tarefa, deveríamos listar o conteúdo da primeira página do link . Eu usei lince para este. Então, para a segunda parte, nos pediram para filtrar a saída de forma a listar apenas as manchetes (nomes dos artigos) da primeira página do slashdot.org (esta literalmente me esmagou). Tenha em mente que esta foi uma tarefa de 12 em um exame de 100 minutos, então eu acho que há uma maneira rápida de fazê-lo, mas não consegui encontrar um patteren discernível. Alguma idéia de como resolver isso?

    
por user43389 28.01.2015 / 19:02

2 respostas

0

grep '<h.*>.*<\/h.>' sample.html | sed -e 's/<[^>]*>//g'

grep 'regex (todas as tags de cabeçalho)' filename pipe ("|") sed remove todas as tags html

Isso deve funcionar.

    
por mertyildiran 28.01.2015 / 19:53
0

Você precisa de dois componentes. Primeiro, você precisa de algo que possa buscar a página principal do slashdot (o html bruto) e, em seguida, algo que lhe permita obter as manchetes a partir disso.

O primeiro componente pode ser curl ou wget . Eu sou parcial para wget :

wget -O slashdot.html link

Em seguida, veja slashdot.html com um editor de texto. Você verá que as manchetes estão contidas em tags. Portanto, o segundo componente é algo que entende bem o HTML para permitir que você obtenha apenas as tags h2. Você poderia fazer isso com algumas expressões regulares inteligentes usando grep, awk ou sed, mas você ficará louco. Eu prefiro algo que conhece HTML um pouco melhor. Se você tiver permissão para instalar pacotes extras, obtenha o pacote libxml2-utils e use xmllint . Ele pode analisar HTML (com a opção -html) e compreende a notação xpath para seleção de nó HTML / XML. Explicar o xpath está além do escopo de uma resposta aqui, e seria um tópico de pesquisa muito bom para você aprender mais, então eu sugiro que você procure no google "xpath" para entender como funciona.

Sobre o único truque adicional é que o xmllint irá imprimir o texto de h2 nós textualmente, assim ele ficará feio, já que eles estão todos em uma linha. Também usarei redirecionamento e pipes para evitar a criação de arquivos temporários e descartar a saída de validação html do xmllint (o slashdot html é extremamente incompatível):

wget -q -O - http://slashdot.org | xmllint -html -xpath '//h2/span/a/text()' - 2>/dev/null

Você notará que as manchetes estão todas em uma linha. Agora, para separá-los, altere-o para isso (para inserir um caractere \n como parte do texto do título antes do fechamento </a> :

wget -q -O - http://slashdot.org | sed 's/<\/a>/\n<\/a>/g' | xmllint -html -xpath '//h2/span/a/text()' - 2>/dev/null
  1. Primeiro, acesse a página inicial do slashdot, exibindo o HTML na saída padrão ( -O - ) e suprimindo as mensagens de progresso do wget ( -q ).
  2. Canalize para sed para adicionar \n após cada tag </a> de fechamento.
  3. Finalmente canalize isso para xmllint (use - como arquivo de entrada para ler de stdin), peça para usar o analisador html e mostre apenas os nós correspondentes à expressão xpath dada, descartando qualquer saída de diagnóstico ( 2>/dev/null para descartar o padrão erro).
por roadmr 28.01.2015 / 19:57