Usando o bash, como extrair o texto da URL e do título da imagem específica do arquivo html?

1

Dados vários arquivos html numericamente ordenados, cada um com várias tags de imagem, mas apenas uma imagem com o id que estou procurando e seguindo a convenção

<img title="$titleText" src="$imgURL" id="foo" border="0" />

onde $imgURL e $titleText são exclusivos para cada página e não são previsíveis, pois o URL da página é (previsível) e a imagem que eu quero em cada página tem id="foo" (o mesmo em cada página, outras imagens um id diferente ou não).

Como devo proceder para extrair as sequências $imgURL e $titleText em bash ?

Até agora eu estou olhando para um ponto de partida de

for count in 'seq 1 400'; 
   do page="https://website/$count.html"; 
   imgURL=[somehow get $imgURL from $page];
   titleText=[somehow get $titleText from $page];
   echo -e "$count\n$titleText\n$imgURL\n\n" >> some-file; 
done

mas sem uma ideia real sobre como realizar as partes entre parênteses.
Ele provavelmente terá que envolver pelo menos dois sed / grep / curl / wget .

Edit: 95% respondido pelo JoW abaixo, os últimos detalhes do par seguem aqui

Depois que JoW me apontou na direção certa, consegui descobrir o resto com facilidade. O script final usado, que teve o mesmo efeito pretendido como o código bash do "ponto de partida" acima, foi:

#!/usr/bin/python
#
from bs4 import BeautifulSoup
import requests
for count in xrange(1, 400):
    ct = str(count)
    url = "website/" + ct + ".html"
    data = requests.get("https://" +url)
    soup = BeautifulSoup(data.text)
    for link in soup.findAll("img", {"id": "foo"}):
        with open('some-file', "a") as out:
            out.write(ct + "\n" + link['title'] + "\n" + link['src'] + "\n\n")
    
por polyisoprene 25.07.2016 / 09:31

1 resposta

0
Recentemente eu tive que trabalhar com um problema similar e depois de incontáveis horas de frustração, acabei usando o Python com o BeautifulSoup4, que eu deveria ter usado desde o começo - e você também deveria, na minha opinião. É MUITO mais fácil de trabalhar, pois é realmente construído para esse tipo de exercício (ou seja, analisar HTML). Você pode facilmente escrever um script python usando o BS4, coletando todos os URLs de sua imagem em um arquivo, e então chamar esse script do bash.

Isso é o que eu faria.

Editar:

Aqui está uma amostra rápida de como isso poderia ser:

#!/bin/python

from bs4 import BeautifulSoup

soup = BeautifulSoup(open("index.html")) 

for link in soup.findAll("img", {"id": "foo"})
  print(link['src'])

Obviamente, isso apenas verifica um arquivo (index.html) e imprime o link para stoud. Para o seu propósito, você escreveria tudo em python (por exemplo, passaria pelos arquivos aqui) ou passaria os nomes dos arquivos do bash para o seu script python. Em qualquer caso, você provavelmente vai querer escrever URL para um arquivo de saída.

with open('output.txt', 'a') as out:
 out.write(link['src'])
    
por 26.07.2016 / 13:54

Tags