Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсер web страниц 
V
    Опции темы
Nаtаshа
Дата 3.12.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 9.10.2011

Репутация: нет
Всего: нет



Доброго всем дня!Нужна ваша помощь, т.к. в перл я еще не разбираюсь.
Код

#!C:/perl/bin/perl -w


use Socket;

$host = "www.google.ru";
$port = "80";


$iaddr = inet_aton($host);
if(!$iaddr)
{
    print "ERROR\n";
    exit(1);
}

my $sock_name = sockaddr_in($port, $iaddr);  


...
my $body = "";
$body .= $_ while <CONN>;
close(CONN);
open(F1,">web-page.html");
print(F1 "$body");
#print "$body";
}



Собственно первый вопрос:
почему не работает c именем хоста mail.ru ( выдает bad request) или go.mail.ru/search_images?fr=mailru(вообще не работает)
Второй:
  как скачать всю страничку целиком. Т.е. выдернуть все ссылки на файлы и скачать их в папку res и заменить ссылки  в документе.
пробовала с помощью HTML::LinkExtor, но не помогло что-то(точнее я глупая).
Третий
 нужно выдернуть ссылки на другие страницы,и вывести их в STDOUT

Что бы не было лишних вопросов,программа должна быть написана с использование сокетов.(т.е. нужно реализовать протокол html самостоятельно).
Заранее спасибо
 

Это сообщение отредактировал(а) Nаtаshа - 23.12.2011, 15:57
PM MAIL   Вверх
Pfailed
Дата 3.12.2011, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Цитата(Nаtаshа @  3.12.2011,  13:46 Найти цитируемый пост)
почему не работает c именем хоста mail.ru 

Потому что запрос неверный. Должно начинаться с "GET /PATH", где PATH путь к требуемуму документу от корня.
http://ru.wikipedia.org/wiki/HTTP#.D0.A1.D....BE.D0.BB.D0.B0

Цитата(Nаtаshа @  3.12.2011,  13:46 Найти цитируемый пост)
выдернуть все ссылки на файлы

Цитата(Nаtаshа @  3.12.2011,  13:46 Найти цитируемый пост)
пробовала с помощью HTML::LinkExtor, но не помогло что-то

Как пробовали?


--------------------
PM MAIL   Вверх
dixoNICH
Дата 4.12.2011, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 222
Регистрация: 20.3.2011

Репутация: нет
Всего: нет



протокол, наверно, не html, а http, всё же.
PM MAIL   Вверх
Nаtаshа
Дата 4.12.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 9.10.2011

Репутация: нет
Всего: нет



Цитата

Потому что запрос неверный. Должно начинаться с "GET /PATH", где PATH путь к требуемуму документу от корня.
http://ru.wikipedia.org/wiki/HTTP#.D0.A1.D....BE.D0.BB.D0.B0

Спасибо.

Код

#!C:/perl/bin/perl -w

use Socket;
use HTML::LinkExtor;
use Data::Dumper;
#use strict;

$host = "news.mail.ru" ; 
$path = "/politics/7504642/";
$port = "80";
$iaddr = inet_aton($host);
if(!$iaddr)
{
    print "ERROR\n";
    exit(1);
}


my $sock_name = sockaddr_in($port, $iaddr);   
#    or die "Couldn't convert $host into an Internet address: $!\n";

socket(CONN,PF_INET,SOCK_STREAM,getprotobyname('tcp'));
connect(CONN,$sock_name)
    or die "Couldn't' connect to $host: $!\n";
select(CONN); $|=1; #select(STDOUT);
print CONN "GET $path HTTP/1.1\n";
print CONN "Host: $host\n\n";
print CONN "User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5\n";
print CONN "Accept: text/html";

my $body = "";
$body .= $_ while <CONN>;  #читаем страничку
close(CONN);
$body =~ s/^.+?\n\r?\n\r?//s;
open(F1,">web-page.html"); #скачиваемая страничка
open(F2,">links.txt");  #сюда кладем ссылки
print(F1 "$body");
#print "$body";
my $parser = HTML::LinkExtor->new();
$parser->parse($body); 
my @links = $parser->links; 
print(F2 Dumper \@links); 




Список ссылок с тегами получем так:
Код

my $parser = HTML::LinkExtor->new();
$parser->parse($body); 
my @links = $parser->links; 
print(F2 Dumper \@links); 



Нужно собрать ссылки на другие страницы отдельно и вывести их. В странице их не менять.

А ссылки на файлы(картинки архивы css, js и т.д.) скачать в отдельную папочку и заменить ссылки на эти файлы в документе(страничке).
Сложность в том,что нужно скачивать эти файлы через сокет. С посыланием запросов через сокет.

Добавлено через 1 минуту и 19 секунд
Цитата(dixoNICH @  4.12.2011,  13:02 Найти цитируемый пост)
протокол, наверно, не html, а http, всё же.


Да, точно.Ошиблась!

PM MAIL   Вверх
Palatin
Дата 7.1.2012, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.1.2012
Где: Москва

Репутация: нет
Всего: нет



парсер ($page - ваша страница):

Код

use HTML::TreeBuilder;
my $tree = HTML::TreeBuilder->new(); 
$tree->parse($page); 
$tree->eof();
my @tags = $r->look_down("_tag", "a");
my @refs = ();
while (@tags) {
    push @refs, $_->attr('href');
}


В массиве @refs - все ссылки
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0535 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.