parse HTML no Bash (quando o grep não é suficiente)

0

Isso está me enlouquecendo, já que tenho certeza que deve haver algum programa fazendo o trabalho, mas não consigo encontrá-lo.
Note-se, eu estaria em ARM / Raspberry tão infelizmente Xidel não é uma opção aqui, a menos que alguém é gentil o suficiente para me apontar na direção certa para compilar-me (se possível a todos). Eu também tentei w3m , mas não tenho certeza se colocar a página em outro arquivo formatado seria realmente útil, mas, por favor, prove que estou errado!

Basicamente eu preciso ler uma url https, então analisar o html para algo facilmente acessível a partir do Bash, e finalmente armazenar alguns valores em um db. Eu já estou fazendo a maior parte do trabalho simplesmente com grep , mas assim que os dados que eu preciso não são exatamente como eles devem ser formatados, estou preso. Veja o exemplo:

<h1>Title</h1> #easy to extract Title only with grep | sed

<h1>
Title
</h1> #no way

Para que você possa ver a captura aqui, o que preciso é uma solução de script que leia a página inteira e forneça uma matriz do conteúdo, em vez da saída formatada "aleatoriamente" que tenho atualmente.
Obrigado a todos

    
por nxet 21.02.2016 / 11:33

2 respostas

3

Eu filtraria o arquivo usando tidy , para colocar cada tag de nível superior em uma coluna separada linha e use algo mais adequado para esse tipo de script (como Perl) para manipular a marcação. sed é mais útil quando as alterações são muito simples.

Por exemplo, um fragmento desta página (depois da filtragem) seria assim (usando tidy -wrap 4096 para reduzir as linhas quebradas):

<body class="question-page new-topbar">
<noscript>
<div id="noscript-padding"></div>
</noscript>
<div id="notify-container"></div>
<div id="overlay-header"></div>
<div id="custom-header"></div>
<div class="topbar">
<div class="topbar-wrapper">
<div class="js-topbar-dialog-corral">
<div class="topbar-dialog siteSwitcher-dialog dno">
<div class="header">
<h3><a href="//unix.stackexchange.com">current community</a></h3>
</div>
<div class="modal-content current-site-container">
<ul class="current-site">

As tags "a" , etc., serão inline, mas a estrutura da página é mais simples de trabalhar.

Eu "baixei" a página usando lynx -source . No entanto, você poderia usar uma variedade de ferramentas: wget e curl são mais usados para essa finalidade.

    
por 21.02.2016 / 13:01
0

tem uma tentativa pup (para OSX: brew install https://raw.githubusercontent.com/EricChiang/pup/master/pup.rb ) u pode usar o seletor e extrator CSS3 para obter o valor de href attr

    
por 18.05.2016 / 09:25

Tags