Gostaria de extrair links de uma sequência numérica de páginas como esta:
http://example.com/page001.html
http://example.com/page002.html
http://example.com/page003.html
...
http://example.com/page329.html
O que eu quero na saída é um arquivo de texto com URLs coletados dos links destas páginas:
http://www.test.com/index.html
http://www.google.com
http://www.superuser.com/questions
Para ser claro, não quero baixar as páginas, só quero uma lista de links.
O software Windows seria uma ideia, mas o Linux também serviria. Tudo o que consigo pensar é em escrever um script em lote longo com o Xidel, mas não seria muito robusto ao encontrar erros. Curl pode baixar o intervalo de páginas, mas preciso analisá-las de alguma forma.
Obrigado a Enigman por me colocar no caminho certo. Criei um script Perl que lê URLs de um arquivo e exibe links que correspondem a uma string armazenada em $site:
use warnings;
use LWP;
$site = "twitter.com";
my $browser = LWP::UserAgent->new;
my @ns_headers = (
'User-Agent' => 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36',
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language' => 'en-GB,en;q=0.8',
);
open (URLLIST, 'urls.txt');
while (<URLLIST>) {
chomp;
print "# $_\n";
my $response = $browser->get($_, @ns_headers);
die "Can't get $_ -- ", $response->status_line
unless $response->is_success;
my @urls = $response->content =~ /\shref="?([^\s>"]+)/gi ;
foreach $url(@urls) {
if ($url =~ /$site/) {
print("$url\n");
}
}
}
close(URLLIST);
Para gerar a lista de URLs fiz um pequeno script em lote:
@echo off
for /l %%i in (0, 15, 75) do @echo http://www.example.com/page_%%i.html
O script Perl apenas para quando ocorre um erro, o que eu prefiro. Seria trivial modificá-lo para simplesmente continuar. O agente do usuário e os dados de aceitação são extraídos do Chrome, porque alguns sites não gostam de nada que pareça um bot. Se você pretende verificar sites que não são de sua propriedade, respeite o robots.txt e configure um agente de usuário personalizado.
Responder1
Se você quiser usar código para fazer isso, você pode fazê-lo em Perl usando os módulos LWP::Simple ou Mechanize.
O seguinte pode ter o que você procuraEncontre todos os links de uma página da web usando o módulo LWP::Simple
Isso pressupõe que você se sinta confortável em usar uma solução de linha de comando usando Perl. Isso funciona da mesma forma nas plataformas Windows e Linux. Não demoraria muito para modificar os URLs como parâmetros da linha de comando para analisar.
Responder2
Sim, é um bom e velho script bash. Isso usa o navegador lynx para extrair os URLs das páginas e despejá-los em um arquivo de texto:
#!/bin/bash
#
# Usage:
#
# linkextract <start> <end> <pad> <url>
#
# <start> is the first number in the filename range. Must be an integer
# <stop> is the last number in the filename range. Must be an integer
# <pad> is the number of digits the number in the filename is zero-padded to.
# <url> is the URL. Insert "<num>" where you want the number to appear. You'll
# need to enclose the entire argument in quotes
for (( i=${1} ; i<=${2} ; i++ )); do {
num=$(printf "%04d" ${i})
url=$(echo ${4} | sed "s/<num>/${num}/")
lynx -dump -listonly "${url}" | sed -r -n "/^ +[0-9]/s/^ +[0-9]+\. //p"
}; done
Você precisará instalar o navegador lynx, que está disponível no Debian como o pacote ‘lynx’. O script imprime os URLs extraídos em stdout. Então, para o exemplo da sua pergunta, você faria (supondo que você salve o script em um arquivo chamado linkextract):
$ linkextract 1 329 3 "http://example.com/page<num>.html"
Responder3
Você pode usar oRastreador do Visualizador de Sitepara este trabalho. Baixe e instale-o e clique emNovo projeto, digite o URL do seu site, clique em OK eIniciar rastreamentobotão de ferramenta.
Após a conclusão do rastreamento, clique duas vezesTodos os linksrelatório doRelatóriosaba. Você receberá todos os links presentes no site, bem como outras informações: URLs de links de origem/destino, tipo de conteúdo (HTML, imagem, pdf, css, etc.), resposta e assim por diante. Selecione toda a tabela (menu de contexto ou atalho Ctrl+A) e clique emCopiar linhas com cabeçalhositem do menu de contexto. Depois disso, você pode colar os dados em uma planilha Excel ou em um documento de texto simples:
O programa tem um período de teste de 30 dias, mas é completo, então você pode usá-lo gratuitamente por 1 mês.