Extraindo links de um intervalo numérico de páginas da web

Extraindo links de um intervalo numérico de páginas da web

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:

extrair todos os links do site

O programa tem um período de teste de 30 dias, mas é completo, então você pode usá-lo gratuitamente por 1 mês.

informação relacionada