Извлечение ссылок из числового диапазона веб-страниц

Извлечение ссылок из числового диапазона веб-страниц

Я хотел бы извлечь ссылки из числовой последовательности страниц, например:

http://example.com/page001.html
http://example.com/page002.html
http://example.com/page003.html
...
http://example.com/page329.html

На выходе я хочу получить текстовый файл с URL-адресами, собранными из ссылок на этих страницах:

http://www.test.com/index.html
http://www.google.com
http://www.superuser.com/questions

Если говорить точнее, я не хочу скачивать страницы, мне нужен просто список ссылок.

Программное обеспечение Windows было бы идеей, но Linux тоже подойдет. Все, что я могу придумать, это написать длинный пакетный скрипт с помощью Xidel, но он не будет очень надежным при возникновении ошибок. Curl может загрузить диапазон страниц, но затем мне нужно будет как-то их разобрать.


Спасибо Enigman за то, что направил меня на верный путь. Я создал скрипт Perl, который считывает URL-адреса из файла и выдает ссылки, соответствующие строке, хранящейся в $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);

Для генерации списка URL я создал небольшой пакетный скрипт:

@echo off
for /l %%i in (0, 15, 75) do @echo http://www.example.com/page_%%i.html

Скрипт Perl просто останавливается при ошибке, что мне больше нравится. Было бы просто изменить его, чтобы он просто продолжал работать. User agent и accept data взяты из Chrome, потому что некоторым сайтам не нравится все, что выглядит как бот. Если вы собираетесь сканировать сайты, которые вам не принадлежат, пожалуйста, соблюдайте robots.txt и настройте собственный user agent.

решение1

Если вы хотите использовать для этого код, вы можете сделать это на Perl, используя модули LWP::Simple или Mechanize.

Ниже приведено то, что вам нужно.Найти все ссылки на веб-странице с помощью модуля LWP::Simple

Это предполагает, что вы хорошо разбираетесь в решении командной строки с использованием Perl. Это работает одинаково на платформах Windows и Linux. Не потребуется много изменений, чтобы принимать URL-адреса в качестве параметров из командной строки для анализа.

решение2

Да, это старый добрый скрипт bash. Он использует браузер lynx для извлечения URL-адресов со страниц и выгрузки их в текстовый файл:

#!/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

Вам нужно будет установить браузер lynx, который доступен в Debian как пакет 'lynx'. Скрипт выводит извлеченные URL-адреса на stdout. Так что для примера в вашем вопросе вы бы сделали (предполагая, что вы сохранили скрипт в файле с именем linkextract):

$ linkextract 1 329 3 "http://example.com/page<num>.html"

решение3

Вы можете использоватьВеб-сканер визуализатора сайтадля этой работы. Загрузите и установите его, затем нажмитеНовый проект, введите URL вашего веб-сайта, нажмите «ОК», затемНачать сканированиекнопка инструмента.

После завершения сканирования дважды щелкнитеВсе ссылкиотчет оОтчетывкладка. Вам будут предоставлены все ссылки, которые присутствуют на сайте, а также другая информация: URL-адреса исходных/целевых ссылок, тип контента (HTML, изображение, pdf, css и т. д.), ответ и т. д. Выберите всю таблицу (контекстное меню или сочетание клавиш Ctrl+A), затем нажмитеКопировать строки с заголовкамипункт контекстного меню. После этого вы можете вставить данные в таблицу Excel или простой текстовый документ:

извлечь все ссылки на сайт

Программа имеет 30-дневный пробный период, но она полнофункциональна, поэтому вы можете пользоваться ею бесплатно в течение 1 месяца.

Связанный контент