Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Perl: Общие вопросы > Как перейти к конкретной строке? |
Автор: Brim 11.9.2009, 22:41 |
С помощью следующего кода выдергиваю код страницы: my $url = "http://domain.name/"; my $ua = LWP::UserAgent->new(); $ua->agent("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322)" . $ua->agent); my $request = HTTP::Request->new('GET', $url); my $hres = $ua->request($request); push(@logbuffer,split(/\n/,$hres->content)); Тут все работает нормально. А вот дальше можно пробежаться по всем строкам с помощью цикла, чтобы найти то, что нужно. Но попался случай, когда строки выглядят вот так: <td>392</td> <td>31.76</td> <td>36.15</td> <td>33.7874</td> А значение нужно выбрать всего одно. Я точно знаю номер строки в котором находится нужное значение и знаю как ее распарсить. Подскажите пожалуйста как перейти к этой строке, номер которой мне известен? |
Автор: sir_nuf_nuf 12.9.2009, 10:59 |
Brim, нельзя опираться на номер строки при разборе html. Вот добавят эти товарищи рекламу на сайт, или контент изменится - и все.. номер строки поплывет. Используйте регулярки или HTML::Parse |
Автор: Brim 12.9.2009, 12:54 |
sir_nuf_nuf, я отдаю себе отчет в том, какие проблемы могут возникнуть. Однако, как с помощью регулярного выражения выдернуть цифру "36.15" из третьей строки в этом примере у меня идей нет: <td>392</td> <td>31.76</td> <td>36.15</td> <td>33.7874</td> Если на сайте что-то поменяется, я поправлю парсилку... ![]() |
Автор: Brim 12.9.2009, 13:54 |
В общем сделал коряво: while ($i < $string_number) { ++$i; shift @logbuffer; } но работает. ![]() |
Автор: Brim 12.9.2009, 14:27 |
Хотя это я, конечно, ступил. Все намного проще: print($logbuffer[номер_строки]); |
Автор: sir_nuf_nuf 12.9.2009, 22:25 | ||
Ну раз отдаете отчет.. остается только удивляться вашей храбрости =) Регулярка для извлечения 3-ей TD шки
|