Вытаскиваем все ссылки из HTML perl'ом

sergey_
На сайте с 09.01.2007
Offline
55
2512

В perl есть массив @html в нем html страницы.

пытаюсь получить все ссылки которые есть в нем:

@html = ~/<a[^>]+?href\s*=\s*["']?([^'" >]+?)[ '"]?>/sgi;

но нужного результата не получаю :(

наверно гдето скосячил ? не поможете?

Черный список покупателей http://blclient.ru (http://blclient.ru) Апи для интернет магазинов http://blclient.ru/API/ (http://blclient.ru/API/) Отслеживание посылок Почты России с СМС уведомлениями (http://blclient.ru/).
Small_Forward
На сайте с 02.03.2006
Offline
32
#1

Попробуйте так:

# преобразуем массив строк HTML-страницы в строку

$html = join("",@html);

# выбираем все ссылки со страницы

@html = $html =~ m/<A[^>]+?HREF\s*=\s*["']?([^'" >]+?)[ '"].*?>/sig;

С уважением, Игорь
sergey_
На сайте с 09.01.2007
Offline
55
#2

не работает :(

Small_Forward
На сайте с 02.03.2006
Offline
32
#3

#!/usr/bin/perl

# Более подробно

print "Content-type: text/html\n\n";

# указываем путь к HTML-файлу

$file = "/путь к файлу/my_file.htm";

# читаем HTML-файл и пишем все в массив

open (FILE,"<$file"); @html=<FILE>; close(FILE);

# преобразуем массив строк HTML-страницы в строку

$html = join("",@html);

# выбираем все ссылки со страницы

@html = $html =~ m/<A[^>]+?HREF\s*=\s*["']?([^'" >]+?)[ '"].*?>/sig;

# выводим полученные ссылки, каждая - с новой строки

foreach (@html) {

print $_ . "<br>";

}

sergey_
На сайте с 09.01.2007
Offline
55
#4

интересно, а анкоры вытащить намного сложнее?

можете помочь со скриптом?

D
На сайте с 14.01.2007
Offline
153
#5
sergey_:
интересно, а анкоры вытащить намного сложнее?
можете помочь со скриптом?

# выбираем все ссылки со страницы

@links= $html =~ m/<A[^>]+?HREF\s*=\s*["']?([^'" >]+?)[ '"].*?>/sig;

@anchors= $html =~ m/<A[^>]+?HREF\s*=\s*["']?[^'" >]+?[ '"].*?>([^<]+)/sig;

# выводим полученные ссылки, каждая - с новой строки

foreach (@links) {

print $_ . "<br>";

}

foreach (@anchors) {

print $_ . "<br>";

}

типа того...

Small_Forward
На сайте с 02.03.2006
Offline
32
#6

Вариантов для реализации очень много, можно и так:

# выбираем все ссылки с анкорами со страницы

while ($html =~ s/<A[^>]+?HREF\s*=\s*["']?([^'" >]+?)[ '"].*?>([^<]+)//si) {

push @Ahtml, $2.": ".$1

}

# выводим полученные анкоры и ссылки, каждую пару - с новой строки

foreach (@Ahtml) {print $_ . "<br>";}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий