парсинг документа с помощью HTML :: TableExtract [Perl] для получения только некоторых меток и значений [строка за строкой] - PullRequest
1 голос
/ 19 декабря 2010

Добрый вечер дорогая община,

Прежде всего - я очень, очень рад, что нашел это замечательное место. Мне очень очень нравится этот форум, так как у него большое и поддерживающее сообщество! Я узнаю много, ребята, здесь! У каждого вопроса есть несколько замечательных рецензентов, и каждая ветка является богатым ценным и обучающим активом.

Что ж, я довольно новичок в Perl - и довольно плохо знаком с этой платой здесь: сейчас я работаю над небольшим парсером: я хочу разобрать таблицу

нажмите здесь, чтобы увидеть целевой URL - с очень простой таблицей (только некоторые строки)

У этой страницы есть таблица: хорошо, стол с завесами и ярлыками. Нам нужно предоставить что-то, что однозначно идентифицирует данную таблицу. Это может быть содержимое его заголовков или атрибутов HTML. В этом случае в документе только одна таблица, поэтому нам даже не нужно этого делать. Но что бы предоставить что-либо конструктору, я бы предоставил класс таблицы. Мы не хотим столбцы таблицы. Первый столбец этой таблицы состоит из меток, а второй столбец состоит из значений. Чтобы получить метки и значения одновременно, мы должны обрабатывать таблицу построчно. Хорошо - это можно сделать так:

#!/usr/bin/perl

use strict; use warnings;
use HTML::TableExtract;
use YAML;

my $te = HTML::TableExtract->new(
    attribs => { class => 'bp_ergebnis_tab_info' },
);

$te->parse_file('t.html');
# here the file with the captured site is stored 

foreach my $table ( $te->tables ) { 
    foreach my $row ($table->rows) {
        print "   ", join(',', @$row), "\n";
    }
}

Посмотреть результаты:

 martin@suse-linux:~/perl> perl  parser_perl_nrw2.pl
 Use of uninitialized value $row in join or string at parser_perl_nrw2.pl line 17.
  Schuldaten,
  Schule hat Schulbetrieb
  Schulnummer,143960

   Amtliche Bezeichnung,�Franziskusschule Kath. Hauptschule Ahaus - Sekundarstufe I -

   Strasse,Hof zum Ahaus 6

   Plz und Ort,48683 Ahaus

   Telefon,02561 4291990

   Fax,02561 42919920

   E-Mail-Adresse,143960@schule.nrw.de


   Internet,http://www.franziskusschule.de
  ,Schule in �ffentlicher Tr�gerschaft

ХОРОШО, я хочу получить данные, которые показаны выше - но если вы видите ниже - есть еще несколько строк текста и кода, ... говорящих так. (/ i хочу «избавиться» от следующих строк !!!)

Use of uninitialized value $row in join or string at parser_perl_nrw2.pl
line 17.
,Schülergesamtzahl,648
Use of uninitialized value $row in join or string at parser_perl_nrw2.pl
line 17.
,Ganztagsunterricht,Ja (erweiterter Ganztagsbetrieb)
Sonstiges,Teilnahme am Projekt 'Betrieb und Schule (BUS)'
Use of uninitialized value $row in join or string at parser_perl_nrw2.pl
line 17.
Unterrichtsangebote,
Use of uninitialized value $row in join or string at parser_perl_nrw2.pl
line 17.
Schule erteilt Unterricht in Fremdsprache(n)...,
,Englisch

Вопрос: как мне избавиться от неанифицированных данных! Все хорошо - но я хочу избавиться от неанизированных данных ... это очень и очень некрасиво - и поскольку я хочу хранить данные в базе данных - мне не нужны неанизированные данные ...!

Как всегда: любая помощь будет принята с благодарностью - большое спасибо заранее!

С уважением ноль

1 Ответ

1 голос
/ 20 декабря 2010

Вы хотите избавиться от неинициализированных значений предупреждений?

Некоторые ячейки таблицы пусты, поэтому вы можете проверить их или отфильтровать. Вот так например:

foreach my $table ( $te->tables ) {
        foreach my $row ($table->rows) {
        my @values = grep {defined} @$row;
        print "   ", join(',', @values), "\n";
       }
    }

Вы также можете полностью отключить предупреждения для этого конкретного блока с помощью no warnings ' uninitialized', но обычно это не очень хорошая практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...